链接:https://www.nowcoder.com/questionTerminal/729f5e6e2acc4f3cb14a2262888f86fb
来源:牛客网
给定 x, k ,求满足 x + y = x | y 的第 k 小的正整数 y 。 | 是二进制的或(or)运算,例如 3 | 5 = 7。
比如当 x=5,k=1时返回 2,因为5+1=6 不等于 5|1=5,而 5+2=7 等于 5 | 2 = 7。
输入描述:
每组测试用例仅包含一组数据,每组数据为两个正整数 x , k。 满足 0 < x , k ≤ 2,000,000,000。
输出描述:
输出一个数y。
示例1
输入
5 1
输出
2
解题思路:需要认真分析总结,得到其规律,然后在编程实现上,主要考察的是位运算的操作。
结论:把k表示成二进制数,填入x取0的比特位,x取1的比特位保持为0,得到y。
更多请参见:https://www.nowcoder.com/profile/3482365/codeBookDetail?submissionId=33064441
参考代码如下:
x,k=[int(x) for x in input().split()] bitNum=1 ans=0 # 目标是把k的各位依次填在x中是0的位上 while k: if x & bitNum==0: #bitNum不断左移,x中当前bitNUM位为0的话,把k的最低位放在这儿 ans+=bitNum*(k&1) # k&1取k的最低位,k不断右移,直到取尽k的所有位 k=k>>1 bitNum=bitNum<<1 print(ans)