资源限制
时间限制: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;
解题思路:
想要求范围内二进制数中1的个数,就要先把二进制数弄出来,但是通过观察可以发现,最后并没有要求使用二进制数,所以不需要额外的数组保存我们算出来的二进制数,而是在计算二进制的时候,每出现一个1就统计出来,直到所有的二进制数统计完毕,为了使思路更清晰,我用一个函数计算一个二进制数,然后套在一个循环中,计算出最后结果,代码如下:
#include<bits/stdc++.h>
using namespace std;
int binary(int n){
int sum = 0;
int res;
while(n > 0){
res = n % 2;
n = n / 2;
if(res == 1){
sum ++;
}
}
return sum;
}
int main() {
int m, n;
cin >> m >> n;
int num = 0;
for(int i = m; i <= n; i ++){
num += binary(i);
}
cout << num;
return 0;
}