Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 n개의 설정 비트와 m개의 설정되지 않은 비트가 있는 가장 큰 수 찾기

<시간/>

이 문제에서는 두 개의 정수 값 n과 m이 제공됩니다. 우리의 임무는 n이 설정되고 m이 설정되지 않은 비트가 있는 가장 큰 수를 찾는 것입니다. 숫자의 이진 표현에서.

문제를 이해하기 위해 예를 들어보겠습니다.

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

설명 -

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

솔루션 접근 방식

문제에 대한 간단한 해결책은 (n+m) 세트 비트로 구성된 수를 찾는 것입니다. 이 숫자에서 끝(LSB)에서 m비트를 토글합니다. (n+m) 비트를 설정하여 숫자를 생성하려면

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

그런 다음 m 비트를 토글하고 숫자를 반환합니다.

예시

솔루션 작동을 설명하는 프로그램

#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;
}

출력

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