SRM416 Div2 500

問題

binary weightとは、その正の整数を2進数にしたときの1の個数である。正の整数Nが与えられるので、binary weightが同じになるNより大きい最小の整数を返す。

考え方

2進数に直して見てみると、「..上位ビット..01..下位ビット..」のならびにならびになっていれば0と1を入れ替えて、下位ビットにある1をすべて右側に動かしたものが最小の次の整数になる。
たとえば、
1000010111110000の場合は100001「01」11110000と見ることができ次の数は100001「10」00001111が答えになる。