蚂蚁的难题(一)
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
-
小蚂蚁童鞋最近迷上了位运算,他感觉位运算非常神奇。不过他最近遇到了一个难题:
给定一个区间[a,b],在区间里寻找两个数x和y,使得x异或y最大。来,帮帮他吧!
- 输入
- 有多组测试数据(以EOF结尾)。
每组数据输入两个数a,b.(0<=a<b<2^63) 输出 - 输出a到b之间,异或最大的值。 样例输入
-
1 2 8 9
样例输出 -
3 1
-
- 有多组测试数据(以EOF结尾)。
思路:异或的算法是相异为1,先将十进制数化为二进制,补齐后比较,得出的二进制数就是结果00000011,(3)2=00000011
m-1=m*2-1=3.
#include<stdio.h>
int main()
{long long a,b,n,m;//long long 在vc6.0是不通过的while(~scanf("%lld%lld",&a,&b))
{
n=a^b;
m=1;
while(n)
{
m*=2;
n/=2;
}
printf("%lld\n",m-1);
}
return 0;
}
与 a&b 相同为1.不同为0.
或 a|b 有1则1,