不转换为二进制,直接用位运算实现循环移位
实现16位二进制的循环移位,可以先判断移出位是否为1,然后将原数字左移1位,再加上移出位,之后和0xffff进行与操作,取低16位。最多循环16次即可得出结果
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(void){
int a, b;
const int MASK1 = 0xffff, MASK2=0x8000;
while(cin>>a>>b){
int in=0;
bool flag = false;
if(a > b){
swap(a, b);
}
for(int i=0; i<16; i++){
if(a == b){
flag = true;
break;
}
in = (a>>15)&1;
a = ((a<<1) + in)&MASK1;
}
if(flag){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
}
return 0;
}