短除法:比如十进制整数19
19/2=9……1
9/2=4……1
4/2=2……0
2/2=1……0
所以最后计算的结果就是10011
短除法代码:
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
int cnt=0;
while(n!=1) //当除到结果为1的时候,停止循环
{
if(n%2==1) //余数为1,则计数加1。
{
cnt++;
n=n/2;
}
else
n=n/2;
}
cnt++;
cout << cnt << endl;
}
return 0;
}
位运算的方法,输入的正整数每次与自己减1之后的数做位与(&)运算,每次运算就会减少一个1。
位运算代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
int cnt=0;
while(n)
{
n=n&(n-1);
cnt++;
}
cout << cnt << endl;
}
return 0;
}