decimal number,またはdecimal numeralをbinary numberにconvertするアルゴリズムをあれこれ探していたら、このサイトに以下のような非常に簡素なアルゴリズムが載っていた。
1 2 3 4 5 | void toBinary(int x) { if (x <= 1) cout << x; else { toBinary(x/2); cout << x%2; } } |
こんな簡単なコードで10進数から2進数に変換できるのかと感心させられた。 このプログラムでやっている事は、inputされた値が9だとしたら、x≥1だからelseへ、xは9なので9%2は1、次に、9/2は4でx≥1だからelseへ、4%2の0がprependされて01になり、4/2は2でx≥1だからelseへ、2%2は0だから0が先頭に追加され001になり、2/2は1なのでx <= 1になりxの値である1がprependeされて1001になる。10進数9を2進数に変換すると1001という値が得られる。
cout << x%2
をcout << x
に変えると、1249の結果が得られる。%による剰余演算の値が返されるのではなく、x/2の値がそのまま返されている。
pythonで10進数を2進数に変換するコードは以下のようになる。
次回は2進数を10進数に変換するプログラムを書いてみようと思う。今度は何と自力でプログラムを書き上げたいと思っているが、まぁ、無理だろう。
スポンサーリンク
スポンサーリンク