这题算是一个水题,我却用了很久也做不出来,因为自己对位运算非常不了解。
在网上找到一个比较满意的代码 转载自 此处
#include <iostream>
using namespace std;
const int MAX_BIT=32;
int CountOne(int input)
{
int cnt=0;
for (int i=0; i<MAX_BIT; i++)
{
if (input>>i&1)//右移i位,比较与1的大小,如果相等则++;
{
cnt++;
}
}
return cnt;
}
int main()
{
int input;
while (cin>>input)
{
if(input==0)
break;
for (int ii=input+1;; ii++)
{
if(CountOne(ii)==CountOne(input))
{
cout<<ii<<endl;
break;
}
}
}
return 1;
}
>>的运算级比较高
即 input>>i&1 先右移 i 位 ,再与1 比较大小,以此可以计数二进制中1 的个数。