题目描述
一个等式满足 x+y = x | y 。给出一个正整数y有很多个,从第一个开始有小到大数y,给定一个正整数k求第k个y
算法思路
满足 x+y = x | y 即 x & y=0。将k中所有二进制位依次填入x中二进制的0位,并清除x中二进制的1为(即与x作亦或操作),即为答案!
long long getk_y(long long x,long long k)
{
//y用于存储k中所有二进制位填进x后,x值
long long y=x;
int num=0,bit=0; //记录移位信息
while(k!=0)
{
bit=1<<num;
//依次判断x的二进制位
if((x & bit) ==0)
{
//x二进制位为0,且此时k对应二进制位为1
if((k & 1)==1)
{
//则将x加上对应值存入y
y+=bit;
}
//右移k,用于判断下一位
k=k>>1;
}
++num;
}
return y^x;
}