描述
输入一个正整数,计算它在二进制下的1的个数。
注意多组输入输出!!!!!!
数据范围:1≤n≤2^31−1
输入描述:
输入一个整数
输出描述:
计算整数二进制中1的个数
示例1
输入:
5
输出:
2
说明:
5的二进制表示是101,有2个1
示例2
输入:
0
输出:
0
解题思路:
这道题比较简单,可以用两种方法求解
第一个方法是对2取余,再除2,循环执行(直到除数为0停止),过程中将余数进行累加,累加得到的数就是二进制1的个数;
第二个方法是将整数与0x01执行按位与运算,运算后将整数右移1位,循环执行(直到整数为0停止),运算过程中将按位与得到的结果累加,最终得到的就是二进制1的个数;
以下代码为第二种方法:
#include <stdio.h>
#define N 100
int main()
{
int n,arr[N],i=0,cnt;
while(scanf("%d",&n)!=EOF)
{
cnt=0;
while(n>0)
{
cnt+=n&0x01;
n>>=1;
}
arr[i++]=cnt;
}
for(cnt=0;cnt<i;cnt++)
printf("%d\n",arr[cnt]);
return 0;
}