Maximum XOR value of a pair from a range in C++

C++Server Side ProgrammingProgramming

Problem statement

Given a range [L, R], we need to find two integers in this range such that their XOR is maximum among all possible choices of two integers

If the given range is L = 1 and R = 21 then the output will be 31 as − 31 is XOR of 15 and 16 and it is maximum within range.

Algorithm

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

Example

#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;
}

Output

When you compile and execute the above program. It generates the following output −

Result = 31
raja
Published on 10-Feb-2020 09:58:34
Advertisements