查找输入整个二进制中1的个数
题目
题目分析
计算它在二进制下的1的个数。 注意多组输入输出!!!!!! 数据范围:1≤n≤2^31 −1思路分析
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; }
运行结果
标签:count,EOF,二进制,scanf,个数,查找,例题,输入 From: https://www.cnblogs.com/hcrzhi/p/17284261.html