首页 > 编程知识 正文

今日头条单招,今日头条校招试题

时间:2023-05-04 23:51:23 阅读:218536 作者:4821

传送门

Description

给定 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。

思路

题解:两个数做或运算,根据1 | 1 = 1,但 1 + 1 = 0(二进制加法),因此根据这个结论我们可以从 x + y = x | y 推得 x & y = 0,转换为求得第 k 小的 y 使得 x & y = 0,将 k 转换成为二进制,那么其二进制位为 1 的需与 x 的二进制位为 0 的位对齐。

  #include<bits/stdc++.h>using namespace std; int main(){ long long x,k; cin >> x >> k; long long res = 0; long long tmp = 1; while (x){ if ((!(x & 1))){ if (k & 1){ res |= tmp; } k >>= 1; } x >>= 1; tmp <<= 1; } while (k){ if (k & 1){ res |= tmp; } k >>= 1; tmp <<= 1; } cout << res << endl; return 0;}

  

 

转载于:https://www.cnblogs.com/ZhaoxiCheung/p/8620840.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。