题解 | 位操作练习
位操作练习
https://www.nowcoder.com/practice/7bdc346ca39841f6a05f73d98477621d
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int a, b;
while (cin >> a >> b) {
// 先保证 a 和 b 的二进制表示都为 16 位
vector<int> bina(16, 0), binb(16, 0);
// 填充 a 和 b 的二进制位
for (int i = 15; i >= 0; i--) {
bina[i] = a & 1;
a >>= 1;
binb[i] = b & 1;
b >>= 1;
}
// 对 b 进行循环左移并比较
bool found = false;
for (int i = 0; i < 16; i++) {
bool isequal = true;
// 进行循环左移
for (int j = 0; j < 16; j++) {
if (bina[j] != binb[(j + i) % 16]) {
isequal = false;
break;
}
}
if (isequal) {
cout << "YES" << endl;
found = true;
break;
}
}
if (!found) {
cout << "NO" << endl;
}
}
}
查看11道真题和解析