среда, 7 августа 2013 г.

7. Римские числа

Посчитать сумму двух натуральных чисел А и В, записанных в римской системе счисления. Ответ также записать в римской системе счисления.
   М = 1000D = 500,  С 100L = 50X = 10V = 5I =1 (Все числа – не превышают 2000).
Код решения:
*****
type str2 = string[2];
const
 Rims : array[1..14] of str2 = ('M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I',' ');
 Arab : array[1..14] of integer = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1, 0);

var
sum,N, NI, I, J : integer;
S,s1,s2 : string;

function Arab2Rim(N : integer) : string;
var S : string;
    I : integer;
begin
  S := ''; I:=1;
  while N > 0 do begin
    while Arab[I]<=N do begin
      S := S + Rims[I];
      N := N - Arab[I]
    end;
    I:=I+1
  end;
  Arab2Rim := S
end;

function Rim2Arab (S:string) : integer;
var I, N : integer;
begin
  I:=1; N := 0;
  while S<>'' do begin
    while Rims[I] = Copy(S, 1, Length(Rims[I]) ) do begin
      S := Copy( S, 1+Length(Rims[I]), 255);
      N := N + Arab[I]
    end;
    I:=I+1
  end;
  Rim2Arab := N
end;
begin
ReadLn(S);
for i:=1 to length(S) do
begin
     if S[i]='+' then
     begin
          s1:=copy(S,1,i-1);
          s2:=copy(S,i+1,length(S)-i);
     end;
end;
sum:=Rim2Arab(s1)+Rim2Arab(s2);
writeln(Arab2Rim(sum));
end.
*****

Комментариев нет:

Отправить комментарий