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

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

0 件のコメント:

コメントを投稿