Binary system_____(Bin 神 OJ)

来源:互联网 发布:电脑flash制作软件 编辑:程序博客网 时间:2024/06/01 10:11

Description

给定一个范围[a,b]  (0<=a<b<=10^18) 求出该范围内二进制中1的个数最多的数,如果存在多个答案,输出最小的那个数

Input

输入数据有多组,每组数据输入两个整数a,b,表示区间[a, b]。

Output

输出该区间内二进制的1最多的整数,如果有多个数二进制1的个数相同,输出最小的那个数。

Sample Input

4 8
7 14

Sample Output

7
7


分析:找规律的一道题, 把两个数都化为二进制然后对齐(位数不足前面凑0),然后两个数从前往后上下匹配,从第一个不相同的地方开始,变为0后面的全部变为1.这个数就是所求的拿个数.


上代码:
#include <stdio.h>long long a,b,c,d;int main(){while(scanf("%lld%lld",&a,&b)!=EOF){c=a^b;d=1;while(c){c=c/2;d=d*2;}d=d/2-1;printf("%lld\n",d|a);}return 0;}



0 0
原创粉丝点击