题意:求一个区间内所有数的二进制数的1有多少位数
思路:先将其转化为二进制,因为只需要1的个数,所以可以先将其排序之后,通过下标的方式输出其1的位数。还有一个要注意的是1的位数可能超过int,使用long long 保险。
代码:
#include <iostream>
#include<algorithm>
#include<vector>
using namespace std;
int bin(int n){
vector<int> num;
while(n!=0){
num.push_back(n%2);
n/=2;
}
sort(num.begin(),num.end(),greater<int>());//按从大到小的顺序排列
for(int i=0;i<num.size();i++){
if(num[i]==0)return i;
}
return num.size();//全部是1的情况
}
int main(int argc, char** argv) {
long long l,r,sum = 0;
cin>>l>>r;
for(int i=l;i<=r;i++){
sum += bin(i);
}
printf("%I64d",sum);
return 0;
}