プログラミンコンテストでは、例えば10進数を5進数に変換する、などの進数の変換が必要となる場合があります。今回は、整数の場合を対象に、python3で進数を変換する方法を紹介します。

進数とは?

 まず、進数とは何か? を確認していきます。私達は普段10進数を使用しますが、例えば、10進数で 573という数字を少し難しく考えれば、以下のように考えることができます。

573 (10進数) = 5 ×102  + 7 ×101  + 3 ×100 
= 5 ×100 + 7 ×10 + 3 ×1

各桁が持つ重みを、10の指数で表示している訳です。これを例にとれば、8進数の 573 を10進数で表示する場合は、以下のように考えることができます。

573 (8進数) = 5 × 8 2 + 7 × 81 + 3 × 80 
= 5 × 64 + 7 × 8 + 3 ×1
= 379(10進数)

緑色の部分が、8進数であるため 8 に変わっただけですね。

python3で、n 進数から10進数へ変換(整数)

 それではpython3でのプログラミングについて、比較的簡単な、n 進数から10進数への変換から紹介します。例として10進数で15となる数字について、2進数から5進数までを表示します。

print(int('1111', 2))
# --> 15
print(int('120', 3))
# --> 15
print(int('33', 4))
# --> 15
print(int('30', 5))
# --> 15

n , r をそれぞれ10進数に変換する前の数値、進数 とすれば、int( ‘n’, r ) と書けば良い事が分かります。ただし n については ‘ ‘ で囲まれていますので、str であることに注意して下さい。

python3で、10進数から 2、8 および16進数への変換(整数)

 続いては、n 進数から10進数へ変換する方法を紹介しますが、まずは2、8、 および16進数から10進数へ変換する方法を紹介します。なぜこの3つを説明するかと言えば、これらについては関数が用意されているからです。すなわち、2進数については bin( )8進数については oct( ) そして16進数については hex( )を使えば簡単に変換できます。また以下のコード中で、出力結果にそれぞれ、0b、0x、そして0oが表示されていますが、これはプレフィックスと呼ばれるもので、10進数ではなく n 進数であることを明示するために用いられます。

print(bin(15))
# --> 0b1111
print(hex(15))
# --> 0xf
print(oct(15))
# --> 0o17

python3で、10進数からn 進数への変換(整数)

それでは最後に、10進数から任意の n 進数へ変換する方法について説明します。これについては以下のように関数(ここでは def change_basenumber( ) )を実装し使用します (他の実装方法はあるかと思います)。引数として、num :変換前の10進数の数値、base_num:変換したい進数 を与えます。
※戻り値は str であることに注意して下さい。

def change_basenum(num, base_num):
    if (int(num/base_num)):
        return change_basenum(int(num/base_num), base_num) + str(num% base_num)
    return str(num% base_num)

print(change_basenum(15, 2))
# --> 1111

以上がpython3で進数の変換を行うための方法です。