藍橋杯 二進制數數 C++算法訓練 HERODING的藍橋杯之路

資源限制
時間限制: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;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章