Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm số lớn nhất có n tập và m bit chưa đặt trong C ++

Trong bài toán này, chúng ta có hai giá trị nguyên, n và m. Nhiệm vụ của chúng ta là tìm số lớn nhất có n bit được đặt và m bit chưa được đặt trong biểu diễn nhị phân của số.

Hãy lấy một ví dụ để hiểu vấn đề

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

Giải thích -

Largest number will have 3 set bits and then 1 unset bit.
(1110)2 = 14

Phương pháp tiếp cận giải pháp

Một giải pháp đơn giản cho vấn đề là tìm số bao gồm (n + m) các bit được thiết lập. Từ số này, tắt m bit từ cuối (LSB). Để tạo một số với (n + m) các bit được đặt,

$$ (1 \ ll (n + m)) - 1 $$

Sau đó chuyển đổi m bit và trả về số.

Ví dụ

Chương trình minh họa hoạt động của giải pháp của chúng tôi

#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<<"The largest number with "<<n<<" set bits and "<<m<<" unset bits is "<<findlargestNumber(n, m);
   return 0;
}

Đầu ra

The largest number with 5 set bits and 2 unset bits is 124