資源限制
時間限制: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;
}