题解写给自己看。昨天写了一道题,而且自己还写过题解,然并软,自己没出来,所以只有自己真正理解题了,才是真正会了,
题意: 略
思路: 二进制。我自己一直不太懂二进制,一看到这道题也没有思路,看了下题解,搞懂了这题怎么做。令x=a^b; 这样做的目的是去除a和b的二进制的前面的相同的1,因为b是最大的。所以x的二进制的长度就是最大的数的二进制的长度。因为总有两个数可以异或之后二进制长度为x且全为1。
AC代码:
#include <cstdio>
#define ll long long
int main(){
ll a,b;
while(scanf("%lld%lld",&a,&b)!=EOF){
ll x=a^b;
int cnt=0;
while(x){
cnt++; x>>=1;
}
printf("%lld\n",((1ll)<<cnt)-1);
}
return 0;
}