読者です 読者をやめる 読者になる 読者になる

整数をローマ数字に変換

冗長なのでもっと短くできる。

また別の書き方もあるんだろう。

でも自分にはこれくらいベタな書き方がわかりやすいかな…(あとあと見るぶんにも)

ローマ数字は1から3999までしかないので拡張性は気にしなくていいのです。

def int2roman(n)
    s = []
    singles = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX']
    doubles = ['X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC']
    triples = ['C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM']
    centum = 100
    quingenti = 500
    mille = 1000
    while n >= mille:
        s.append('M')
        n -= mille 
    if 100 <= n <= 999:
        i = int(n / 100)
        s.append(triples[i-1])
        n -= i * 100
    if 10 <= n <= 99:
        i = int(n / 10)
        s.append(doubles[i-1])
        n -= i * 10
    if 1 <= n <= 9:
        s.append(singles[n-1])
    return "".join(s)