描述
输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。
数据范围:保证在 32 位整型数字范围内
输入描述:
输入一个整数(int类型)
输出描述:
这个数转换成2进制后,输出1的个数。
示例1
输入:5
输出:2
示例2
输入:0
输出:0
移位法
将二进制的32位每一位与1相互’与‘,如果得到的值是1,证明该位为1,计数增加,否则继续移位。
#include <stdio.h>
int main() {
int a,count=0;
scanf("%d",&a);
int i;
for(i=0;i<32;i++)
{
if((a&1)==1)
{
count++;
}
a=a>>1;
}
printf("%d",count);
return 0;
}
模2法
对输入的整数进行模2运算,余数是1,计数器增加,做完继续除以2.
#include <stdio.h>
int main() {
int a,count=0;
scanf("%d",&a);
while(a)
{
if(a%2)
{
count++;
}
a/=2;
}
printf("%d",count);
return 0;
}
"1"的方法
每次将最右边的1变为0,统计1的个数。
#include <stdio.h>
int main() {
int a,count=0;
scanf("%d",&a);
while(a)
{
a&=(a-1);
count++;
}
printf("%d",count);
return 0;
}
比较法
#include <stdio.h>
#include <math.h>
int main() {
int a,i,count=0;
scanf("%d",&a);
for(i=32;i>=0;i--)
{
if(a>=pow(2,i))
{
a-=pow(2,i);
count++;
}
}
printf("%d",count);
return 0;
}