XOR

XOR

https://ac.nowcoder.com/acm/problem/206185

题目:XOR
来源:哈尔滨理工大学软件与微电子学院程序设计竞赛(同步赛)

解题思路

假设存在一个正整数数列 1,2,3,···,N - 1,N,从中选出两个数(两个数可以相同),使它们异或后的值最大吗?异或后的最大值是多少?

要使异或后的值最大,那么异或后的值的二进制表示中 1 要位于高位且 1 要尽可能多,
其中 1 能达到的最高位取决于 N 的二进制表示中 1 所处的最高位。

例如,N = 9,其二进制表示为 0b1001。
1 能达到的最高位是第 4 位,选取 0b1000,该数一定小于等于 N。
剩下的 3 位补 1,为 0b0111,该数一定小于等于 N。
两个数异或得 0b1111。

当 N = 1 时,两个数都只能为 1,异或后为 0。

C++代码

#include<iostream>
using namespace std;

int main(){
    long long N;
    cin >> N;
    if(N == 1){
        cout << 0 << endl;
        return 0;
    }
    long long a = 1;
    while(N){
        N >>= 1;
        a <<= 1;
    }
    --a;
    cout << a << endl;
    return 0;
}
全部评论

相关推荐

高斯林的信徒:问你有没有保底,好人啊,就差把这是kpi面告诉你了
点赞 评论 收藏
分享
用户64975461947315:这不很正常吗,2个月开实习证明,这个薪资也还算合理,深圳Java好多150不包吃不包住呢,而且也提前和你说了没有转正机会,现在贼多牛马公司骗你说毕业转正,你辛辛苦苦干了半年拿到毕业证,后面和你说没hc了😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务