Roman numerals/Encode
Roman numerals/Encode
You are encouraged to solve this task according to the task description, using any language you may know.
You are encouraged to solve this task according to the task description, using any language you may know.
Create a function taking a positive integer as its parameter and returning a string containing the Roman Numeral representation of that integer. <Ada> with Ada.Text_Io; use Ada.Text_Io; with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
procedure Roman_Numeral_Test is
function To_Roman(Number : Positive) return String is Result : Unbounded_String; Current_Value : Natural := Number; begin if Current_Value >= 1000 then Result := Result & ((Current_Value / 1000) * 'M'); Current_Value := Current_Value mod 1000; end if; if Current_Value >= 900 then Result := Result & "CM"; Current_Value := Current_Value mod 900; end if; if Current_Value >= 500 then Result := Result & "D"; Current_Value := Current_Value mod 500; end if; if Current_Value >= 100 then Result := Result & ((Current_Value / 100) * 'C'); Current_Value := Current_Value mod 100; end if; if Current_Value >= 90 then Result := Result & "XC"; Current_Value := Current_Value mod 90; end if; if Current_Value >= 50 then Result := Result & "L"; Current_Value := Current_Value mod 50; end if; if Current_Value >= 40 then Result := Result & "XL"; Current_Value := Current_Value mod 40; end if; if Current_Value >= 10 then Result := Result & ((Current_Value / 10) * 'X'); Current_Value := Current_Value mod 10; end if; if Current_Value = 9 then Result := Result & "IX"; Current_Value := 0; end if; if Current_Value >= 5 then Result := Result & "V"; Current_Value := Current_Value mod 5; end if; if Current_Value = 4 then Result := Result & "IV"; Current_Value := 0; end if; Result := Result & (Current_Value * 'I'); return To_String(Result); end To_Roman;
begin
Put_Line(To_Roman(1999)); Put_Line(To_Roman(25)); Put_Line(To_Roman(944));
end Roman_Numeral_Test; </Ada> Output:
MCMXCIX XXV CMXLIV