[每天例题] 查找输入整数二进制中1的个数

发布时间 2023-04-07 14:55:36作者: 山远尽成云

查找输入整个二进制中1的个数

题目

 

题目分析

计算它在二进制下的1的个数。
注意多组输入输出!!!!!!
 
数据范围:1n2^31 

思路分析

1.多组数据的输入方法:

1.EOF法

因为在线评测系统的输入数据存放在一个文件中,因此可以通过文件是否结束的方式判断输入的数据是否结束。scanf在读取到文件结束符时,会返回标识EOF(end of life),EOF是一个预定义的常量,等于-1。通过判断scanf的返回值否为EOF决定是否退出循环。

 

 

 2.for循环

ps:

1.EOF法常用于不知道几组数据,用while循环,利用scanf()的返回值结束时为EOF。
2.计数法用于知道几组数据,用for循环。

2.十进制转二进制方法:

要点:除二取余,倒序排列解释:将一个十进制数除以二,得到的商再除以二,依此类推直到商等于一或零时为止,倒取将除得的余数,即换算为二进制数的结果

 

例子:(52)10=(00110100)2

 

3.思路

1.先将十进制数转化为二进制数。

2.再使用if统计二进制中1的个数。(统计可以直接统计,也可以将二进制放入数组中,通过数组进行统计)

代码

#include<stdio.h>
int main()
{
	int a;
	while(scanf("%d",&a)!=EOF)
	{
		int count=0;
		while(1)
		{
			//对2求余,得出二进制中的0、1 
			if(a%2==1)
			{
				count++;
			}
			a/=2;
			if(a==1)
			{
				count++;
				break;
			}
		}
		printf("%d\n",count);//输出一定要换行,不然输出多种数据时格式错误
	}
	return 0;
}

  运行结果