題目鏈接:
http://www.topcoder.com/stat?c=problem_statement&pm=9921&rd=13521x+y=x|y.
二進(jìn)制加法1+0=1|0. 當(dāng)而僅當(dāng)x,y的二進(jìn)制表示中,x的'1'位不與y的'1'對(duì)應(yīng),這個(gè)等式就成立.
所以,對(duì)于x中為1的位,y只能為0,對(duì)于x中為0的位,y相應(yīng)位可以任意.
要求第k個(gè)y,很顯然,把k的二進(jìn)制表示填充到x的0位中去,即可.
???class?BitwiseEquations
??????????????{?
??????????????public:?
??????????????long?long?kthPlusOrSolution(int?_x,?int?k)?
??????????????????{?????????????????
??????????????????long?long?result;
??????????????????long?long?mask?=?1;
??????????????????long?long?x?=?_x;
??????????????????result?=?0;
??????????????????
??????????????????for(int?i=0;i<64&&k!=0;++i){
??????????????????????if((mask&x)==0){
????????????????????????????result|=((k&1)*mask);
????????????????????????????k>>=1;
??????????????????????}
??????????????????????mask<<=1;
??????????????????}?
??????????????????return?result;
??????????????}
}