2 해설
-
2
//写0到15的二进制观察得 如果是2的0次方这一位 这个位上的数每2的0次方改变一次 即0 1 0 1 0 1 , 2的1次方每2次改变一次 即0 0 1 1 0 0 1 1 //其他位同理 我们只要找出l,r除以这个位的次方 看它们是在第几次改变 如果都在同一次改变 那l到r这个位均为同一个数 //并且是奇数次改变的时候 因为奇数次改变 这个位都是1 如果不在同一次则必定同时包含不同0和1 不能是按位与结果为1
#include <iostream>
using namespace std;
#define ll long long
int main()
{
ll l,r;
cin>>l>>r;
ll ans=0;
ll num=1;
while(r/num>0)//遍历每一位
{
if(l/num==r/num&&l/num%2!=0)//在同一次改 变 并且是奇数次改变
{
ans+=num;//符合按位与结果位1 累加答案
}
num=num*2;
}
cout<<ans<<endl;
return 0;
}
정보
- ID
- 1211
- 시간
- 1000ms
- 메모리
- 256MiB
- 난이도
- 7
- 태그
- (N/A)
- 제출 기록
- 95
- 맞았습니다.
- 19
- 아이디