課題
アラビア数字(arabic numerals)を受け取って,ローマ数字(romannumerals)を返すmethodを書きなさい
ローマ数字で使われる文字
arabic numerals | roman numerals |
---|---|
1 | I |
5 | V |
10 | X |
50 | L |
100 | C |
500 | D |
1000 | M |
用いたコード
# coding: utf-8
def to_roman(num)
# 4000 未満の数値を入力する
#1,000 に関して
thou = num / 1000
a = num % 1000
roman = 'M' * thou
#100 に関して
hun = a / 100
b = a % 100
if (hun == 9)
roman += 'CM';
elsif (hun >= 5)
roman += 'D' + 'C' * (hun - 5)
elsif (hun == 4)
roman += 'CD'
else
roman += 'C' * hun
end
# 10 の個数を計算
ten = b / 10
c = b % 10
if (ten == 9)
roman += 'XC'
elsif (ten >= 5)
roman += 'L' + 'X' * (ten - 5)
elsif (ten == 4)
roman += 'XL'
else
roman += 'X' * ten
end
# 1 の個数を計算
if (c == 9)
roman += 'IX'
elsif (c >= 5)
roman += 'V' + 'I' * (c - 5)
elsif (c == 4)
roman += 'IV'
else
roman += 'I' * c
end
p "アラビア数字=#{num} ローマ数字=#{roman}"
end
data = [1, 2, 4, 5, 6, 9, 10, 11, 14, 15, 19, 38, 42, 49, 51, 97, 99, 439, 483, 499, 732, 961, 999, 1999]
data.each do |num|
to_roman(num)
end
コード解説
出力結果
"アラビア数字=1 ローマ数字=I"
"アラビア数字=2 ローマ数字=II"
"アラビア数字=4 ローマ数字=IV"
"アラビア数字=5 ローマ数字=V"
"アラビア数字=6 ローマ数字=VI"
"アラビア数字=9 ローマ数字=IX"
"アラビア数字=10 ローマ数字=X"
"アラビア数字=11 ローマ数字=XI"
"アラビア数字=14 ローマ数字=XIV"
"アラビア数字=15 ローマ数字=XV"
"アラビア数字=19 ローマ数字=XIX"
"アラビア数字=38 ローマ数字=XXXVIII"
"アラビア数字=42 ローマ数字=XLII"
"アラビア数字=49 ローマ数字=XLIX"
"アラビア数字=51 ローマ数字=LI"
"アラビア数字=97 ローマ数字=XCVII"
"アラビア数字=99 ローマ数字=XCIX"
"アラビア数字=439 ローマ数字=CDXXXIX"
"アラビア数字=483 ローマ数字=CDLXXXIII"
"アラビア数字=499 ローマ数字=CDXCIX"
"アラビア数字=732 ローマ数字=DCCXXXII"
"アラビア数字=961 ローマ数字=CMLXI"
"アラビア数字=999 ローマ数字=CMXCIX"
"アラビア数字=1999 ローマ数字=MCMXCIX"
- source ~/grad_members_20f/members/FumiyaToyoda/roman_numerals.org