Yukicoder No.327 アルファベット列
solution
$26$で再帰的にdivmodしていく。
$1$-basedで考えて$0$番目の文字列は空文字列
、$N+1$番目の文字列は$\lfloor N / 26 \rfloor$番目の文字列の後ろに$N \bmod 26$番目の文字を加えたもの。
最初に$N$に$1$を足すのが肝。
自然な対応ではA
に対応する自然数は$1$であり、$0$に対応するのは空文字列
である。
似た話として、自然数の$10$進数表記がある。10
は$2$桁の自然数であり1
は$1$桁の自然数であるが、0
は$0$桁あるいは$- \infty$桁の自然数というのが自然であり、例外処理をされない本来の表記は0
ではなく空文字列
と考えるのが妥当だ、というのがある。
implementation
#!/usr/bin/env python3
import string
n = int(input()) + 1
s = ''
while n:
n -= 1
s += string.ascii_uppercase[n % 26]
n //= 26
s = ''.join(reversed(s))
print(s)