yukicoder No.381 名声値を稼ごう Extra
解法
kmjp さんの解法を参考にしました。
kmjp.hatenablog.jp
適当に i = 1, 2, ..., 100 で実験すると, 答えが __builtin_popcount(N) となりそうなことに気付きます。
実際, (極端に) N = 2^k とすると, 単純に足し算した場合は 2^(k+1) - 1, 2 倍した場合は 2^(k+1) となり 1 得になるのでこうなります。
問題は N を 2 進数に変換する方法なんですが, 世の中便利で python では
print bin(input()).count("1")
とやれば良いようです。