AtCoder Beginner Contest 171 C - One Quadrillion and One Dalmatians【Python】

https://atcoder.jp/contests/abc171/tasks/abc171_c

AtCoder ProblemsのRecommendationで Difficulty: 560、Solve Probability:40%でした。
最初にNが何文字の名前かを求め26進数で考えることで解くことができましたが、実装が難しくかなりの時間がかかってしまいました。

N = int(input())

# 名前の文字数がxのときの最後の番号 end = [26, 702, 18278, ...]
end = []
n = 0
while n <= 1000000000000001:
    n = 26 * (n + 1)
    end.append(n)

# 番号Nの名前の文字数を求める
n_char = 1
for e in end:
    if N <= e:
        break
    n_char += 1

# 26進数で処理するため例えば27を0にする
if n_char != 1:
    adj_N = N - end[n_char-2] - 1
else:
    adj_N = N - 1

# アルファベットのリスト
import string
alph = string.ascii_lowercase

# aを0、zを25として26進数で処理する
s = ''
while adj_N != 0:
    rem = adj_N % 26
    adj_N //= 26
    # 26で割った余りをアルファベットに変換
    s = alph[rem] + s

# 文字数が足りなければaで埋める(Nの文字数が3で文字列が'z'となっている場合は'aaz'とする)
s = s.rjust(n_char, 'a')
print(s)