此题可有多种方法,大概可以分为两种:一种是制表法,另一种就是通俗的数学方法。其中数学方法中一个简单明了的方法就是利用一个while循环,采用按位与的方式。代码如下:
#include<iostream>
using namespace std;
int main()
{
int a;
int count;
while(cin>>a&&a)
{
count=0;
while(a>0)
{
a=(a-1)&a;
count++;
}
cout<<count<<endl;
}
return 0;
}
但是此代码有一个致命的缺陷,就是当输入数字是负数时,输出结果都是0。改进方案如下:
#include<iostream>
using namespace std;
int main()
{
int a;
int count;
while(cin>>a&&a)
{
count=0;
while(a)
{
if(a&1==1)
{
count++;
}
a=a>>1;
}
cout<<count<<endl;
}
return 0;
}
此思路较为清晰,方法就是每次都查看该十进制数末尾是否为1,如果是count++,如果不是,将最后一位右移。然后再比较下一位。
另一种比较难