C++ 中一个范围中一对数的最大异或值


问题陈述

给定一个范围 [L,R],我们需要找出这两个整数,使得它们在所有可能的选择的两个整数中异或值最大

如果给定的范围是 L = 1 且 R = 21,则输出将为 31,因为−31 是 15 和 16 的异或值,并且在范围内是最大的值。

算法

1. Calculate the (L^R) value
2. From most significant bit of this value add all 1s to get the final result

示例

#include <bits/stdc++.h>
using namespace std;
int getMaxXOR(int L, int R){
   int LXR = L ^ R;
   int msbPos = 0;
   while (LXR) {
      msbPos++;
      LXR >>= 1;
   }
   int maxXOR = 0;
   int two = 1;
   while (msbPos--) {
      maxXOR += two;
      two <<= 1;
   }
   return maxXOR;
}
int main(){
   int L = 1;
   int R = 21;
   cout << "Result = " << getMaxXOR(L, R) << endl;
   return 0;
}

输出

当你编译并执行以上程序时,它会生成以下输出 -

Result = 31

更新于:10-02-2020

705 浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告