前書き
この課題では、整数のバイナリ表現の末尾のゼロをに設定する必要があります010101…
。これは例を使用して説明するのが最適です。
整数を指定する400
と、最初のステップはそれをバイナリに変換することです:
110010000
ご覧のとおり、5番目のビットは最下位1
ビットであるため、そこから開始して下位ゼロを次のように置き換え0101
ます。
110010101
最後に、それを10進数に変換します。 405
チャレンジ
正の整数が返されると、上記で定義されたプロセスの対応する結果値が出力されます。
ルール
- このシーケンスは、少なくとも1
1
ビットの整数に対してのみ定義されるため、入力は常に≥1になります - 代わりに、入力を文字列、数字のリスト(10進数)として受け取ることができます
- 無効な入力を処理する必要はありません
テストケース
中間ステップを含むいくつかのテストケースを以下に示します(これらを印刷/返却する必要はありません)。
In -> … -> … -> Out
1 -> 1 -> 1 -> 1
2 -> 10 -> 10 -> 2
3 -> 11 -> 11 -> 3
4 -> 100 -> 101 -> 5
24 -> 11000 -> 11010 -> 26
29 -> 11101 -> 11101 -> 29
32 -> 100000 -> 101010 -> 42
192 -> 11000000 -> 11010101 -> 213
400 -> 110010000 -> 110010101 -> 405
298 -> 100101010 -> 100101010 -> 298
n
入力を分割する最大の2の累乗である場合、答えは単に(input) + ceil((2^n - 2)/3)