ABC192
D - Base n
ででてきた、n進数⇄10進数 変換問題
今後のためにも、
- n進数→10進数
- 10進数→n進数
の自作ライブラリを作成を作っておく。
###(2021/02/24 追記)自作ライブラリ修正
-
10進数→n進数のバグを修正
- 余りが10以上になる場合の考慮漏れ
- 引数・戻り値共にわかりやすいように int に統一
test.py
print(base_n(969,31)) #108
print(base_n(970,31)) #109
print(base_n(971,31)) #-1
print(base_n(991,31)) #-1
print(base_n(992,31)) #110
print(base_n(993,31)) #111
###ちなみに
Python標準で、n進数→10進数は以下のようにも記述できる。
しかし、intの第二引数はまさかの「36」までしか対応していない!
ABC192Dのような、n>36となりうる問題は解けないことに注意!
test.py
print(int('1111',2))
#15
print(int('1111',37))
#ValueError: int() base must be >= 2 and <= 36, or 0
#n進数→10進数
test.py
def base_10(num_n,n):
num_10 = 0
for s in str(num_n):
num_10 *= n
num_10 += int(s)
return num_10
#10進数→n進数
test.py
def base_n(num_10,n):
str_n = ''
while num_10:
if num_10%n>=10:
return -1
str_n += str(num_10%n)
num_10 //= n
return int(str_n[::-1])
###おまけ(練習問題)
ぜひ解いてみましょう!
C - N進数
おわり!