手把手教你求二进制中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 % 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值