欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

蓝桥杯 二进制数数 算法训练

程序员文章站 2022-07-15 09:50:11
...

算法训练 二进制数数
时间限制:1.0s 内存限制:256.0MB

问题描述
  给定L,R。统计[L,R]区间内的所有数在二进制下包含的“1”的个数之和。
  如5的二进制为101,包含2个“1”。
输入格式
  第一行包含2个数L,R
输出格式
  一个数S,表示[L,R]区间内的所有数在二进制下包含的“1”的个数之和。
样例输入
2 3
样例输出
3
数据规模和约定
  L<=R<=100000;

#include<stdio.h>
int main(void)
{
	int L,R,a=0,count=0;/*给定区间L,R*/
	scanf("%d %d",&L,&R);
	for(int i=L;i<=R;i++)/*求区间内的二进制*/
	{
		a=i;/*缺少这个临时变量,直接用i,当i=0跳出while在自加就不能退出for循环 */
		while(a>0)/*因为是计入二进制中1的个数,不用考虑顺序 */
		{
			if(a%2==1)/*当二进制取余的结果为1,计数器增加,将位数减一*/ 
			count++;
			a/=2;
		}
	} 
	printf("%d",count);
	return 0; 
}

还是不知道为什么c++提交就100,c提交就编译错误,以为是用了c++的注释符//,c不支持,改成/**/也不行。