问题是计算32位整数的二进制表示中有多少1。我用C ++写的。
首先我有代码
[[1, 3, 7], [2, 4, null], [null, 5, null], [null, 6, null]]
[[1, 3, 7], [2, 4], [null, 5], [null, 6]]
但它没有传递信息
当我将代码更改为此
时int countOnes(int num) {
int count=0;
while(num>0){
count++;
num=num&num-1;
}
return count;
}
它被接受了。 那么,问题是什么?有人能帮助我吗?
答案 0 :(得分:0)
正如其他人所说,unsigned vs. signed可能会让你绊倒。
我这样做,使用模板参数,因此您可以使用不同类型的数字:
template<typename Num>
unsigned int count_binary_1(const Num& number)
{
unsigned int result = 0;
unsigned int count = sizeof(number) * 8;
for (unsigned int i = 0; i < count; ++i)
{
if ((number >> i) & 1)
{
++result;
}
}
return result;
}