题解 | 位操作练习
位操作练习
https://www.nowcoder.com/practice/7bdc346ca39841f6a05f73d98477621d
#include <bits/stdc++.h>
using namespace std;
void In(int x[], int a) {
for (int i = 0; i < 16; i++) {
x[i] = a % 2;
a /= 2;
}
reverse(&x[0], &x[16]);
}
int cmp(int x[], int y[]) {
for (int i = 0; i < 16; i++) {
if (x[i] != y[i]) {
return 0;
}
}
return 1;
}
void mo(int x[]) {
int tmp = x[0];
for (int i = 0; i < 15; i++) {
x[i] = x[i + 1];
}
x[15] = tmp;
}
int main() {
int a, b, flag = 0;
int x[16], y[16];
while (cin >> a >> b) { // 注意 while 处理多个 case
int x[16] = {0}, y[16] = {0};
In(x, a);
In(y, b);
for (int i = 0; i < 16; i++) {
flag = cmp(x, y);
if (flag == 1) {
break;
}
mo(x);
}
if (flag == 1) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
}
// 64 位输出请用 printf("%lld")
