题解 | #位操作练习#

位操作练习

https://www.nowcoder.com/practice/7bdc346ca39841f6a05f73d98477621d

#include<bits/stdc++.h>
using namespace std;

//函数用于判断num1的16位二进制表示形式是否能由num2经过循环左移得到
bool can_be_shifted(unsigned short num1, unsigned short num2) {
    //遍历所有可能的循环左移位数
    for (int shift = 0; shift < 16; shift++) {
        if (num2 >> 15 & 1) {
            num2 = num2 << 1 | 1;//循环左移时检查最高位是否为1,如果是,则在末位补上1
        } else {
            num2 = num2 << 1;//最高位不是1,直接左移
        }
        //如果经过循环左移后的结果等于num1,则返回true
        if (num2 == num1) {
            return true;
        }
    }
    //如果num2不能经过循环左移得到num1,则返回false
    return false;
}

int main() {
    unsigned short num1, num2;
    while (cin >> num1 >> num2) {
        if (can_be_shifted(num1, num2)) {
            cout << "YES" << endl;
        } else {
            cout << "NO" << endl;
        }
    }
}

全部评论

相关推荐

2024-11-22 17:03
广西师范大学 C++
佛系牛牛:多写一点,不要太多空白
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务