求二进制形式中的1的个数

输入int型整数,求出其二进制形式中的1 的个数。

解题思路:十进制的数转换为二进制,用十进制整数反复对2取余,保留余数,再倒序输入就可以得到该整数的二进制形式。第一次取余得到的是最右边第一位二进制数,要得到下一位二进制需要对原数值除以2,再取余,取余得到的是依次往左的二进制位。

#include <stdio.h>
int main()
{
        int a,n;
        int i;

        printf("Please input a integer number(q to quit):\n");
        while(scanf("%d",&a))
        {
                i = 0;                        //记录二进制形式中的1的个数
                n = a;

        while( a > 0 )
             {        
               if( a % 2 == 1 )               //求出输入的整型的二进制中的1,并记录下来
                {
                         i ++;                         //对每一次求出1,进行累加
                        a = a / 2;                 //每一次除以2可以得到1位二进制
                }
                else 
                        a /= 2;
                }

        printf("number %d has %d 1\nEnter a new number(q to quit):\n",n,i);

        }

        return 0;
}

输出示例:

Please input a integer number(q to quit):
8
number 8 has 1 1
Enter a new number(q to quit):
7
number 7 has 3 1
Enter a new number(q to quit):
255
number 255 has 8 1
Enter a new number(q to quit):
q


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值