Edit

【pythonでABC171を解説】C - One Quadrillion and One Dalmatians

問題概要

問題ページ

問題文

ロジャーは、彼のもとに突如現れた \(1000000000000001\) 匹の犬をすべて飼うことを決意しました。犬たちにはもともと \(1\) から \(1000000000000001\) までの番号がふられていましたが、ロジャーは彼らに以下のルールで名前を授けました。

  • \(1,2,\cdots,26\) 番の番号がついた犬はその順に a,b,...,z と命名されます。
  • \(27,28,29,\cdots,701,702 \) 番の番号がついた犬はその順に aa,ab,ac,...,zy,zz と命名されます。
  • \(703,704,705,\cdots,18277,18278 \) 番の番号がついた犬はその順に aaa,aab,aac,...,zzy,zzz と命名されます。
  • \(18279,18280,18281,\cdots,475253,475254 \) 番の番号がついた犬はその順に aaaa,aaab,aaac,...,zzzy,zzzz と命名されます。
  • \(475255,475256,\cdots \) 番の番号がついた犬はその順に aaaaa,aaaab,... と命名されます。
  • (以下省略)

つまり、ロジャーが授けた名前を番号順に並べると:

a,b,...,z,aa,ab,...,az,ba,bb,...,bz,...,za,zb,...,zz,aaa,aab,...,aaz,aba,abb,...,abz,...,zzz,aaaa,... のようになります。

ロジャーはあなたに問題を出しました。

「番号 \(N\) の犬の名前を答えよ。」

制約

  • \(N\) は整数
  • \( 1 \leq N \leq 1000000000000001\)

問題の考察

ACコード

import sys


def solve():
    input = sys.stdin.readline
    mod = 10 ** 9 + 7
    n = int(input().rstrip('\n'))
    ans = []
    while n != 0:
        n -= 1
        n, m = divmod(n, 26)
        ans.append(chr(97 + m))
    ans.reverse()
    print("".join(ans))


if __name__ == '__main__':
    solve()

プログラミング

-Edit
-