输入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