整数中的1
时间限制:
3000 ms | 内存限制:
250 KB
难度:
4
-
描述
-
给出两个非负32位整型范围内的数a,b,请输出闭区间[a,b]内所有数二进制中各个位的1的总个数。
-
输入
- 一行,给出两个整形数a,b(0<=a<=b<=150000000),空格分隔。 输出
- 一行,输出结果 样例输入
-
1 2
样例输出
-
2
-
#include<iostream> using namespace std; int Count(int n,int m) { if((n>>m)==0) return 0; int d=(n>>m)&1; if(d==1) return (n>>(m+1))*(1<<m)+(n&((1<< m)-1))+1+Count(n,m+1); else return (n>>(m+1))*(1<<m)+Count(n,m+1); } int main() { int a,b; cin>>a>>b; int n=(a==0?1:a); cout<<Count(b,0)-Count(n-1,0)<<endl; return 0; }