【每日例题】蓝桥杯 c++ 最小的或运算

发布时间 2023-11-04 12:50:04作者: 山远尽成云

最小的或运算

题目

问题描述
给定整数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;
}