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