蓝桥杯 二进制数数 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;
} 

猜你喜欢

转载自blog.csdn.net/HERODING23/article/details/106451022