当前位置: 代码迷 >> 综合 >> NYOJ - 整数中的1
  详细解决方案

NYOJ - 整数中的1

热度:33   发布时间:2024-01-20 17:57:49.0

整数中的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;
}
  相关解决方案