[该题的牛客链接](https://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8?
一、方法一:%/达到二进制位右移的效果
//方法一
//
//10 % 2 -> 0
//10 /= 2 -> 5 -> 101
//
// 5 % 2 -> 1 -> count+1
// 5 /= 2 -> 2 -> 10
//
// 2 % 2 -> 0
// 2 /= 2 -> 1 -> 1
//
// 1 % 2 -> 1 -> count+1
// 1 /= 2-> 0 -> 跳出循环
//count得到就是2
#include<stdio.h>
int Count(int n)
{
int count = 0;
while (n)
{
if (n % 2 == 1)
{
count++;
}
n /= 2;
}
return count;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Count(n);
printf("%d\n", ret);
return 0;
}
代码上方注释也给出了大概解释,这里我再用文字解释一下。
我们拿10举例,10的二进制是1010,共两个1
首先10%2得到结果为0,不做处理
然后再让10/=上2,得到结果为5,此时我们可以注意到,5的二进制是101
然后再让5%2,得到结果是1,此时让count加1
然后再让5/=2,得到结果为2,二的二进制是10
然后可以让2在%2得到结果为0,同样不做处理
然后2/=2得到结果为1,对应二进制就是1
然后