题解 | 循环左移直接做
位操作练习
https://www.nowcoder.com/practice/7bdc346ca39841f6a05f73d98477621d
循环左移,但是默认的是无符号左移,那怎么办呢?
就左移的时候检查一下最高位是不是1,如果是1,咱们末尾给他补上就得了呗。用x << 1 | 1
就可以给末尾补1且左移了。
所以,答案就是,两个数a,b,让b循环左移16次,如果16次内任何一次使得a和b相同了那么就输出YES。否则NO。
#include <iostream>
using namespace std;
int main()
{
unsigned short a, b;
while (cin >> a >> b)
{
bool flag = false;
for (int i = 0; i < 16; ++i)
{
if (b >> 15 & 1)
b = b << 1 | 1;
else
b = b << 1;
if (a == b)
{
flag = true;
break;
}
}
flag ? puts("YES") : puts("NO");
}
}