ほぼ基本的な構文は、マスターした気がする。
Google Code Jamの過去問で、10進数をn進数に変換するような処理が必要な問題があったので、
これをPythonで作ってみた。
こんな感じ。。
def base10to(n, b):
if (int(n/b)):
return base10to(int(n/b), b) + str(n%b)
return str(n%b)
上記の関数は、10進数nを、b進数に変換し、結果を文字列で返す。
結果は、こんな感じ。
>>> base10to(1, 2)
'1'
>>> base10to(2, 2)
'10'
>>> base10to(9, 2)
'1001'
>>> base10to(23, 5)
'43'
>>> base10to(100, 9)
'121'
>>> base10to(1234, 10)
'1234'
じゃー、逆のパターンも欲しいよなってことで、
n進数を10進数に変換する関数はこんな感じ。
def base10from(num, b):
n = 0
numlist = list(num);
while (numlist):
n *= b
n += int(numlist.pop(0))
return n
上記の関数は、b進数表記のnumを10進数に変換する。
結果は以下のようになった。
>>> base10from('11',2)
3
>>> base10from('13',5)
8
>>> base10from('123',8)
83
>>> base10from('1234',10)
1234
プログラミングコンテストに向けて、いろいろな問題を解いて練習するのはいいことだが、それ以上に、使えるパーツ(自作の関数やクラス)を蓄えておくことが大切だと痛感した今日この頃。。。
自分の引出しは小さすぎるぜ(泣) 学生のとき、もっと勉強しとけばよかったなー(笑)
Python3で10進数からn進数に変換する関数を作成する際に、こちらの記事を参考にさせていただきました。
返信削除関数内のint(n/b)部分について、nが非常に大きい場合、誤差が生じるようです。
n//b にすると、誤差なく計算できるようになるようです。
ご確認いただけると幸いです。