Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++ 범위에서 쌍의 최대 XOR 값

<시간/>

문제 설명

[L, R] 범위가 주어지면 이 범위에서 XOR이 두 정수의 모든 가능한 선택 중에서 최대가 되도록 두 정수를 찾아야 합니다.

주어진 범위가 L =1이고 R =21이면 -31이 15와 16의 XOR이고 범위 내에서 최대이므로 출력은 31이 됩니다.

알고리즘

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