最小的或运算
题目
问题描述
给定整数a,b,求最小的整数工,满足a|a = ba,其中|表示或运算。
输入格式
第—行包含2个正整数a,b.
输出格式
输出共1行,包含1个整数,表示最终答案。
样例输入
样例输出
评测数据规模
对于所有测评数据,0<a,b <264.
思路分析
1.要求最小的x满足a |x = b|x,根据|运算规则:只要有1就是1,均为0才是0
2.那么如果我们想让条件成立,只要把a,b中二进制位中的不同的数字变成1就可以了
例如:
a : 4 -> 100
b : 5 -> 101
此时a,b最后一位二进制不同,那么我们把最后一位变成1,也就是a | 1,此时a变成了101
同样对b |1,此时b还101
此时a | 1 = b | 1,所以最小的x为1
例如:
a: 110101
b: 101101
此时a,b中不同的位置为:2,3
根据策略,如果将二三位置为1->011000
如果x是这个,那么a|x = 111101
同样的,对于b: b|x = 111101
此时alx = b|x,所以x的二进制序列为11000
所以我们得到了一个结论,将ab中相同位置置为0,不同位置置为1,所得到的二进制序列对应的值就是x的最小值 ,而这个操作就是^。
代码
#include <iostream> using namespace std; int main() { long long a,b; cin>>a>>b; long long x; x=a^b; cout<<x<<endl; return 0; }
标签:101,运算,二进制,最小,long,蓝桥,c++,此时,例题 From: https://www.cnblogs.com/hcrzhi/p/17798669.html