手把手教你求二进制中1的个数
不考虑位操作符
完整代码:
#include <stdio.h>
int func(unsigned int num)
{
int count = 0;
while(num)
{
if(num % 2)
{
count++;
}
num /= 2;
}
return count;
}
int main()
{
int num = 0;
scanf("%d", &num);
printf("%d ", func(num));
return 0;
}
如果说要1234这个十进制数字的每一位,你会打算怎么求?
第一位:
1234%10 得到4
1234 / 10 得到123
第二位:
123 % 10 得到3
123 / 10 得到12
第三位:
12 % 10 得到2
12 / 10 得到1
第四位:
1% 10 得到1
1 / 10 得到0
就此停止
我们可以把以上思路写成一个循环
得到以下代码
while(num)//当num变成0的时候,为假就停下来
{
printf("%d ", num % 10)
num /= 10;
}
按照以上的思路,或许可以借鉴到二进制中
因为是十进制,所以/10%10
但是如果是二进制的话,不就是/2%2了吗?
例:
13:1101
第一位:
13 %2 得到1
13 / 2 得到6
第二位:
6 % 2 得到 0
6 / 2 得到 3
第三位:
3 % 2 得到 1
3 / 2 得到1
第四位:
1 % 2 得到1
1 / 2 得到0
就此结束
得到以下代码:
while(num)//当num变成0的时候,为假就停下来
{
printf("%d ", num %