숫자 n이 주어지면 이진 표현에서 n과 동일한 수의 세트 비트를 사용하여 n보다 큰 숫자를 찾아야 합니다.
바이너리 표현에서 숫자 1을 세트 비트라고 합니다.
예를 들어 보겠습니다.
입력
124
출력
143
알고리즘
-
숫자 n.을 초기화합니다.
-
설정한 비트 수를 구하는 함수를 작성합니다.
-
n + 1을 사용하여 반복 변수를 초기화합니다.
-
무한 루프를 작성하십시오.
-
n의 설정 비트 수와 동일한 숫자에 대한 설정 비트 수를 확인하십시오.
-
번호를 찾으면 반환하십시오.
- 숫자를 증가시킵니다.
-
구현
다음은 위의 알고리즘을 C++로 구현한 것입니다.
#include <bits/stdc++.h> using namespace std; int getSetBitsCount(int n) { int count = 0; while (n) { if (n % 2 == 1) { count += 1; } n /= 2; } return count; } int getNextGreaterElementWithSameSetBits(int n) { int setBitsCount = getSetBitsCount(n); int i = n + 1; while (true) { if (setBitsCount == getSetBitsCount(i)) { return i; } i += 1; } } int main() { int n = 124; cout << getNextGreaterElementWithSameSetBits(n) << endl; return 0; }
출력
위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
143