自分用メモ

プログラミングとかのメモを書きたいです

競プロ典型 90 問:067 - Base 8 to 9(★2)

問題

atcoder.jp

挑戦結果

  • 挑戦日:2021/10/28
  • 結果:解けた
  • 時間:20分

考えたこと

  • 再現するだけ。
  • いったん10進法に戻して計算する。
  • コーナーケース(0のとき)で、WAを出した
  • 実装はちょっと汚い気がした。

公式解説

https://twitter.com/e869120/status/1404931743820357633

解説を読んだふりかえり

  • N=0のコーナーケースに注意と記載されていて凹んだ

ソース

N, K = input().split()
K = int(K)

# 操作。Sは文字列。
def sousa(S):
    if int(S) == 0:
        return "0"

    d = 1
    # Sを9進法で解釈した数値がnum9。(num9は10進数)
    num9 = 0
    for c in reversed(S):
        num9 += (d * int(c))
        d *= 8
    # num9(数値)を、文字列(9進法)に変える
    str9 = []
    while num9 != 0:
        str9.append(str(num9%9))
        num9 //= 9
    str9.reverse()
    # 文字列にして、8を5に変える
    str9 = "".join(str9)
    return str9.replace("8","5")

for _ in range(K):
    N = sousa(N)

print(N)