夏令营机试复习Day02-3
题目描述
给出两个不大于 65535 的非负整数,判断其中一个的 16 位二进制表示形式,是否能由另一个的 16 位二进制表示形式经过循环左移若干位而得到。
循环左移和普通左移的区别:最左边的那一位经过循环左移一位后就会被移到最右边去。
比如: 1011 0000 0000 0001 经过循环左移一位后,变成 0110 0000 0000 0011,若是循环左移2位,则变成 1100 0000 0000 0110。
原题连接
输入格式
输入包含多组测试数据。
每组数据包含两个整数,占一行。
输出格式
每组数据输出一个结果,如果两个数之间能够进行移位转化则输出 YES,否则输出 NO。
输入样例
2 4
9 18
45057 49158
7 12
输出样例
YES
YES
YES
NO
C++ 代码
#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++) {
unsigned short temp=0;
if (a==b){
flag= true;
break;
}
if (b&0x8000)temp=1;
b=b<<1;
b+=temp;
}
if (flag)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}