SRM430 Div2 500

問題

正の整数x,kが与えられる.「x+y=x|y」(|はビット演算のOR)を満たすyのうち,k番目に小さいyを返す.

考え方

例えば,x=5とすると2進数で101なので,和とORが等しくなるためには,1桁目は1なので0しかダメ.2桁目は0なので,0か1であればいい.3桁目は1なので0しかダメ...とxの各桁が1ならばyのその桁は0,0ならば0か1になれる.
k番目に小さいというと,xが0の部分に0か1を割り振ればいいので,kを2進数に直して,xのその桁が1なら0,0ならばkの小さいほうからいれていけばそれが答えになる.