[python]変換バー準1105進数2


BOJ 1105変換アレイ2

質問する



コード#コード#

n, base = list(map(int, input().split()))

digit = 0
num_dic = {
  10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F', 16: 'G', 17: 'H', 18: 'I', 19: 'J',
  20: 'K', 21: 'L', 22: 'M', 23: 'N', 24: 'O', 25: 'P', 26: 'Q', 27: 'R', 28: 'S', 29: 'T',
  30: 'U', 31: 'V', 32: 'W', 33: 'X', 34: 'Y', 35: 'Z'
}

while base**digit <= n:
  digit += 1

m = n
for i in range(1, digit+1):
  q, m = divmod(m, base**(digit-i))

  if q >= 10:
    print(num_dic[q], end='')
  else:
    print(q, end='')
前の位置から探すべきだと思いますので、whileゲートで数桁探して、一番前の位置から最後の位置まで残りを探しました.

コードの変更

n, base = list(map(int, input().split()))
result = ''

while n > 0:
  if n % base >= 10:
    result += chr(n % base + ord('A') - 10)
  else:
    result += str(n % base)
  n //= base

print(result[::-1])
ただし、前の方からでなくても、最後の方から探して逆順に出力することができます.
だから最後の席から残りを計算します.
ベースで割るシェアをベースで割るので、ベースの平方数を求めなくてもいいです.