Roman numerals/Encode

From Rosetta Code
Revision as of 01:36, 1 April 2008 by rosettacode>Waldorf (Created task)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Task
Roman numerals/Encode
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