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
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
JavaScript
PHP