求a|(a+1)|(a+2)|...|(b-1)|b。
分析 :
①:a=b 答案 = a
②:a != b
a 和 b 从高位到低位 第一次不同 在 地 i 位
比如
001010 ----a
001110 -----b
颜色部分为 i 位
i位 左边 按照 a 定, i位 右边 全是 1
所以 区间 a ~ b 和 可以转化为
001010
001110
000111 ----如何求?(见代码)
-------------------
001111 ->答案
1 #include<stdio.h> 2 typedef long long ll; 3 4 int main() { 5 ll a,b; 6 while(~scanf("%lld%lld",&a,&b)) { 7 ll c=a^b; 8 ll x=1; 9 while(x<c) x*=2; 10 printf("%lld\n",a|b|(x-1)); 11 } 12 return 0; 13 }