Page List

Search on the blog

2010年5月16日日曜日

10進数をn進数に変換

Pythonの勉強を始めて、1週間弱。。
ほぼ基本的な構文は、マスターした気がする。

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

プログラミングコンテストに向けて、いろいろな問題を解いて練習するのはいいことだが、それ以上に、使えるパーツ(自作の関数やクラス)を蓄えておくことが大切だと痛感した今日この頃。。。
自分の引出しは小さすぎるぜ(泣) 学生のとき、もっと勉強しとけばよかったなー(笑)

1 件のコメント:

  1. Python3で10進数からn進数に変換する関数を作成する際に、こちらの記事を参考にさせていただきました。
    関数内のint(n/b)部分について、nが非常に大きい場合、誤差が生じるようです。
    n//b にすると、誤差なく計算できるようになるようです。
    ご確認いただけると幸いです。

    返信削除