Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tìm số lớn nhất có n bit 1 và m bit 0 trong C++


Cho hai số nguyên n, m. Nhiệm vụ: tìm số lớn nhất có n bit set (1) và m bit unset (0) trong biểu diễn nhị phân.

Ví dụ minh họa

Input: n = 3, m = 1 Output: 14

Số lớn nhất: 3 bit 1 rồi 1 bit 0 → (1110)₂ = 14

Phương pháp giải

Tạo số có (n+m) bit 1: (1 << (n+m)) - 1. Sau đó tắt m bit cuối (LSB) bằng XOR với (1 << m) - 1.

Ví dụ chương trình

#include <iostream> 
using namespace std; 

int findLargestNumber(int n, int m){
    int maxNum = (1 << (n + m)) - 1;
    if (m == 0) return maxNum;
    int number = (1 << m) - 1;
    return (maxNum ^ number);
}

int main(){
    int n = 5, m = 2;
    cout << "Số lớn nhất với " << n << " bit 1 và " << m << " bit 0 là " << findLargestNumber(n, m);
    return 0;
}

Kết quả

Số lớn nhất với 5 bit 1 và 2 bit 0 là 124