算法训练 二进制数数
问题描述
给定L,R。统计[L,R]区间内的所有数在二进制下包含的“1”的个数之和。
如5的二进制为101,包含2个“1”。
输入格式
第一行包含2个数L,R
输出格式
一个数S,表示[L,R]区间内的所有数在二进制下包含的“1”的个数之和。
样例输入
2 3
样例输出
3
数据规模和约定
L<=R<=100000;
思路
简单题,我的想法是用一个函数将一个十进制数转换成二进制数,再用一个函数判断这个二进制数中有多少个1,定义全局变量进行累加。
代码呈上:
#include <stdio.h>
int sum=0;
int len;
void fun(int a[1000],int len)
{
int i=0;
for(i=0;i<len;i++)
{
if(a[i]==1)
sum++;
}
}
void change(int n)
{
int a[1000];
int i=0;
while(n>0)
{
a[i]=n%2;
n/=2;
i++;
}
fun(a,i);
}
int main()
{
int L,R;
scanf("%d %d",&L,&R);
int i;
for(i=L;i<=R;i++)
{
change(i);
}
printf("%d",sum);
return 0;
}
运行示例