常见算法,将输入的数据依次右移与1做与运算,但是如果是负数,其最高位始终是1(符号位),这样就会陷入死循环。
int count_one(int n)
{
int count = 0;
while (n)
{
if (n & 1)
count++;
n = n >> 1;
}
return count;
}
为了避免死循环,输入数据不动,依次左移1与输入数据做与运算。
int count_one(int n)
{
int count = 0;
int a = 1;
while (a)
{
if (n & a)
count++;
a = a << 1;
}
return count;
}
完整代码:
#include<iostream>
using namespace std;
int count_one(int n)
{
int count = 0;
int a = 1;
while (a)
{
if (n & a)
count++;
a = a << 1;
}
return count;
}
int main()
{
int number;
cout << "pls input a number:";
cin >> number;
int result = count_one(number);
cout << result << endl;
}