LoginSignup
5
0

More than 3 years have passed since last update.

課題 roman numerals

Posted at

課題

アラビア数字(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

コード解説

  • roman に変化する関数
    • それぞれのくらいの数を調べる
  • 入力データを用いて、変換し出力

出力結果

"アラビア数字=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
5
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0