题意:如果输入十进制数7;则输出打印3
7在内存中的二进制位为00000000 00000000 00000000 00000111
其中1的个数为3;
如果是-7,
内存中的二进制数为:111111111 111111111 111111111 111111001
1的个数为30;
接下来展示代码
第一种解法
int main()
{
int n = 0;
int i = 0;//右移i位
int count = 0;//计算1的个数
scanf("%d", &n);//输入整数
for (int i = 0; i < 32; i++)
{
if (((n >> i) & 1) == 1)
{
count++;
}
}
printf("%d", count);
return 0;
}
第二种
int main()
{
int n = 0;
int count = 0;//计算1的个数
scanf("%d", &n);
unsigned int c = n;//防止输入负数,强制后,补码被当成源码,一样可以计算。
while (c)//c被除尽则停止循环
{
if (c % 2 == 1)
{
count++;
}
c /= 2;//类似右移
}
printf("%d", count);
return 0;
}
第三种,较为高效的一种写法循环次数,只用注意1的个数
int main()
{
int n = 0;
int count = 0;//计算1的个数
scanf("%d", &n);
unsigned int c = n;
while (c)
{
c = c & (c - 1);
count++;
}
printf("%d", count);
return 0;
}
第一次写博客,不是很好,继续努力,谢谢!