Same binary weight
时间限制:300 ms | 内存限制:65535 KB
难度:3
描述
The binary weight of a positive integer is the number of 1's in its binary representation.for example,the decmial number 1 has a binary weight of 1,and the decimal number 1717 (which is 11010110101 in binary) has a binary weight of 7.Give a positive integer N,return the smallest integer greater than N that has the same binary weight as N.N will be between 1 and 1000000000,inclusive,the result is guaranteed to fit in a signed 32-bit interget.
输入
The input has multicases and each case contains a integer N.
输出
For each case,output the smallest integer greater than N that has the same binary weight as N.
样例输入
1717
4
7
12
555555
样例输出
1718
8
11
17
555557
来源
上传者
#include <bitset>
#include <iostream>
using namespace std;
int main(){
int n, i, count, j;
while(cin >> n){
bitset<32> bt(n);
for(i = count = 0; i < 32; ++i){
if(bt[i]) ++count;
if(bt[i] && !bt[i+1]){
bt[i] = false;
bt[i+1] = true;
j = i;
break;
}
}
--count;
for(i = 0; i < count; ++i) bt[i] = true;
while(i < j) bt[i++] = false;
cout << bt.to_ulong() << endl;
}
return 0;
}
针对每种情况,输出最小的整数大于N N二进制重量一样。