:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте ::
Путь: Математика » Разное » Перевод: арабская-римская системы
  Перевод из арабской в римскую систему и наоборот



     Алгоритм весьма прост и извлекается непосредственно из исходника.

{ Copyright MM Andrew Usachov }

Const

R: Array[1..13] of String[2] =

('I','IV','V','IX','X','XL','L','XC','C','CD','D','CM','M');

A: Array[1..13] of Integer=

(1,4,5,9,10,40,50,90,100,400,500,900,1000);

Function Roman(N : Integer) : String;

Var Result : String;

    i      : Integer;

begin

 Result := '';

 i := 13;

 While N >0 do

 begin

   While A[i] >N do Dec(i);

   Result := Result + R[i];

   Dec(N, A[i]);

 end;

 Roman := Result;

end;

Function Arabic(S : String) : Integer;

Var Result : Integer;

    i, p   : Integer;

begin

  Arabic := -1;

  Result := 0;

  i := 13;

  p := 1;

  While p <=Length(S) do

  begin

    While Copy(S, p, Length(R[i])) <>R[i] do

    begin

      Dec(i);

      If i = 0 then Exit;

    end;

    Result := Result + A[i];

    p := p + Length(R[i]);

  end;

  If Roman(Result) = S then Arabic := Result

end;

Var N, Err : Integer;

    S : String;

BEGIN

 repeat

   ReadLn(S);

   If S = '' then Break;

   Val(S, N, Err);

   If Err = 0 then

     WriteLn(Roman(N))

   else

     WriteLn(Arabic(S));

 until false;

END.