问题描述 :
给定L,R。统计[L,R]区间内的所有数在二进制下包含的“1”的个数之和。
如5的二进制为101,包含2个“1”。
输入说明 :
第一行包含2个数L,R
1<=L<=R<=100000;
输出说明 :
一个数S,表示[L,R]区间内的所有数在二进制下包含的“1”的个数之和。
输入范例
2 3
输出范例
3
和上面的求位数一样,就是不要傻乎乎的求出来二进制表示是什么样子的
#include<stdio.h>
int count(int x){
int temp,k=0;
while(x>0){
temp=x%2;
x/=2;
if(1==temp)
k++;
}
return k;
}
int main(){
int n,m,i,k;
scanf("%d%d",&n,&m);
k=0;
for(i=n;i<=m;i++){
k+=count(i);
}
printf("%d\n",k);
return 0;
}