2017今日头条校招——或与加

Posted zzy19961112

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017今日头条校招——或与加相关的知识,希望对你有一定的参考价值。

传送门

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;
}

  

 

以上是关于2017今日头条校招——或与加的主要内容,如果未能解决你的问题,请参考以下文章

今日头条2017校招编程题

2017 今日头条编程题汇总:

今日头条2018校招后端方向(第二批)第一题 二分查找

2017年读书计划

2017年9月秋招记录--持续更新

头条校招 编程第一题