xor值最大
题目详情:
给定整数区间[a,b],从闭区间[a,b]中选择两个数,使得它们的异或值最大。 0<=a<=b<2^63答题说明:
main函数可不用完成。
刚开始没有思路,上课的时候想出来了,找到首个 位不同(1和0)的位置ans,答案就是(1<<ans)-1。但会有ans=63的例子卡你。所以...
#include<stdio.h>
long long maxvalue (long long a,long long b)
{
int bit=1,ans=0,i;
long long rst=0,t=1;
while(a||b){
if((b&1)!=(a&1))
ans=bit;
b>>=1;
a>>=1;
bit++;
}
for(i=0;i<ans;i++){
rst+=t;
t*=2;
}
return rst;
}
//start 提示:自动阅卷起始唯一标识,请勿删除或增加。
int main()
{
printf("%lld",maxvalue(0,9223372036854775807));
}
//end //提示:自动阅卷结束唯一标识,请勿删除或增加。