例如,sum(6)必须返回2,因为6的二进制版本是110
不确定逻辑是否正确。
int sum(int n)
{
int count = 0;
while(n)
{
count += n & 1;
n >>= 1;
}
return count;
}
int main(){
int n = 9001;
cout << “The sum of bits for number “ << n << “is” << sum(n) << endl;
retun 0;
}
答案 0 :(得分:5)
与以往一样,解决这些问题的最佳方法是使用标准库。你们都研究过标准库中可用的工具,对吗?
- )
#include <iostream>
#include <bitset>
template<class T>
size_t bits_in(T t)
{
return std::bitset<sizeof(t) * 8>(t).count();
}
int main()
{
using namespace std;
int i = 6;
cout << "bits in " << i << " : " << bits_in(i) << endl;
long l = 6353737;
cout << "bits in " << l << " : " << bits_in(l) << endl;
return 0;
}
预期产出:
bits in 6 : 2
bits in 6353737 : 11
答案 1 :(得分:3)
int sum(int n)
{
int count = 0;
if (0 != n)
{
while(++count, n &= (n - 1));
}
return count;
}
速度很快,因为每1位只能循环一次。
答案 2 :(得分:-1)