题意:
找出a->b有几个值的二进制只有一个0
思路:
这种二进制自己还真是想不清楚,对于数字枚举二进制是0的位置,带进去看是多少返回就行
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
using namespace std;
#define MAXD 1000 + 100
#define Inf 1 << 30
long long s[100];
long long a,b;
long long solve(int n)
{
long long sum=0;
for(int i=1;i<=n;i++)
{
sum+=s[i]<<(i-1);
}
return sum;
}
int main()
{
cin>>a>>b;
for(int i=1;i<=64;i++)
s[i]=1;
int ans=0;
for(int i=2;i<=64;i++)
{
for(int j=1;j<i;j++)
{
s[j]=0;
if(solve(i)>=a&&solve(i)<=b)
{
ans++;
}
s[j]=1;
}
}
cout<<ans<<endl;
}