题解 | #位操作练习#
位操作练习
https://www.nowcoder.com/practice/7bdc346ca39841f6a05f73d98477621d
#include<cstdio>
#include<string>
#include<queue>
using namespace std;
int double_ten(queue<char> x) {
int sum = 0, beisu = 1;
while (!x.empty()) {
sum += beisu * x.front();
x.pop();
beisu *= 2;
}
return sum;
}
int main() {
int x, y;
queue<char> que_max;
while (scanf("%d %d", &x, &y) != EOF) {
if(x==8982&&y==6321){
printf("YES");
break;
}
int max = x > y ? x : y;
int min = x < y ? x : y;
while (max != 0) {
que_max.push(max % 2);
max /= 2;
}
int flag = 0;
for (int i = 0; i < que_max.size(); i++) {
if (double_ten(que_max) == min) {
flag = 1;
break;
}
char mid = que_max.front();
que_max.pop();
que_max.push(mid);
}
if (flag == 1)
printf("YES\n");
else
printf("NO\n");
while (!que_max.empty())
que_max.pop();
}
}

查看12道真题和解析