Create a method that takes Arabic numerals and returns Roman numerals. Arabic numerals are 1 and 2, Roman numerals are I and II, etc.
As a characteristic of Roman numerals, ・ Express numbers by superimposing specific alphabets such as 1: I, 2: II, 3: III. -Characters switch between when the digit is carried up (10: X) and in the middle (5: V). ・ Written in descending order (6: VI, 13: XIII). ・ However, just before the turning point of ↑↑, write a small number to the left of the large number (4: IV, 9: IX).
See wikipedia for details, as it is difficult to understand in theory.
The characters used are VII types of I, V, X, L, C, D, M In particular, the musicians are numbers such as IV and IX that cannot be represented by simply overlapping the alphabets, so these numbers are also treated specially.
class Integer
def to_roman
romannum = ['I','IV','V','IX','X','XL','L','XC','C','CD','D','CM','M']
romanval = [ 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000]
romannum = romannum.reverse
romanval = romanval.reverse
result = ''
len = romannum.length
i = self
for j in 0...13
case
when i == 0;
break
else;
for k in 0...13
case
when i - romanval[k] >= 0
result += romannum[k]
i = i - romanval[k]
break
end
end
end
end
result
end
end
input = [1,2,4,5,6,9,10,11,14,15,19,38,42,
49,51,97,99,439,483,499,732,961,999,1999]
if $PROGRAM_NAME == __FILE__
input.each do |i|
puts "#{i} #{i.to_roman}"
end
end
The process of subtracting the number of draws from the largest was repeated,
The execution result looks like this. As far as I confirmed, the numbers are correct
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
note
・ Honestly, I think the program is bad. I am worried about the amount of calculation because I am using a double for loop (Roman numerals can only represent numbers less than 4000, so this is not a problem). I have stopped because it takes too much time, but I want to try to create an accurate program. ・ It seems that it will be easier to find if you make full use of multiplication and division.