Skip to main content

Solution 9: Integer to Roman Numeral

Given an integer between 1 and 3999, convert it to a Roman numeral. Return a string of the Roman numeral representation.

def int_to_roman(num)
remainder = num
numeral = ''
while remainder > 0
(string, remainder) = get_string_remainder(numeral, remainder)
numeral += string
end
numeral
end

def get_string_remainder(str, int)
return '' if int === 0
if int.to_s[0] == '9'
if int > 899
int = int - 900
string = 'CM'
elsif int > 89
int = int - 90
string = 'XC'
elsif int > 8
int = int - 9
string = 'IX'
end
elsif int.to_s[0] == '4'
if int > 399
int = int - 400
string = 'CD'
elsif int > 39
int = int - 40
string = 'XL'
elsif int > 3
int = int - 4
string = 'IV'
end
elsif (int - 1000 >= 0)
int = int - 1000
string = 'M'
elsif (int - 500 >= 0)
int = int - 500
string = 'D'
elsif (int - 100 >= 0)
int = int - 100
string = 'C'
elsif (int - 50 >= 0)
int = int - 50
string = 'L'
elsif (int - 10 >= 0)
int = int - 10
string = 'X'
elsif (int - 5 >= 0)
int = int - 5
string = 'V'
else
int = int - 1
string = 'I'
end

[string, int]
end