Cod sursa(job #123523)

Utilizator gicagica popescu gica Data 16 ianuarie 2008 12:33:42
Problema A+B Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 5.64 kb
type vector=array[0..16]of integer;
var a,b,c,d:array[0..16]of integer;
    s:string;
    x:string;
    z:char;
    i,j,y:integer;


procedure adunare(a,b:vector);
var i,t:integer;
begin
     t:=0;
     i:=0;
     while (i<a[0])or(i<b[0])or(t>0) do
     begin
          i:=i+1;
          a[i]:=a[i]+b[i]+t;
          t:=a[i] div 10;
          a[i]:=a[i] mod 10;
          if i>a[0] then a[0]:=a[0]+1;
     end;
     for i:=1 to a[0] do c[i]:=a[i];
     c[0]:=a[0];
end;


procedure scadere(a,b:vector);
var i,t:integer;
begin
     t:=0;
     i:=0;
     while (i<b[0])or(t>0) do
     begin
          i:=i+1;
          a[i]:=a[i]-b[i]-t;
          t:=0;
          if a[i]<0 then
          begin
               t:=1;
               a[i]:=a[i]+10;
          end;
     end;
     i:=a[0];
     while (a[i]=0)and(i>1) do
     begin
          a[0]:=a[0]-1;
          i:=i-1;
     end;
     for i:=1 to a[0] do d[i]:=a[i];
     d[0]:=a[0];
end;


begin
     assign(input,'adun.in');
     reset(input);
     assign(output,'adun.out');
     rewrite(output);
     s:='';
     while not eof do
     begin
          readln(x);
          s:=s+x;
     end;
     i:=0;
     while i< length(s) do
     begin
          i:=i+1;
          if (s[i]>='0')and(s[i]<='9') then
          begin
               j:=i;
               while (s[j]<>'+')and(s[j]<>'=')and(s[j]<>';') do
               begin
                    j:=j+1;
                    z:=s[j];
               end;
               if z='+' then
               begin
                    while (s[i]>='0')and(s[i]<='9') do
                    begin
                         a[0]:=a[0]+1;
                         a[a[0]]:=ord(s[i])-ord('0');
                         i:=i+1;
                    end;
               end;
               if z='=' then
               begin
                    while (s[i]>='0')and(s[i]<='9') do
                    begin
                         b[0]:=b[0]+1;
                         b[b[0]]:=ord(s[i])-ord('0');
                         i:=i+1;
                    end;
               end;
               if z=';' then
               begin
                    while (s[i]>='0')and(s[i]<='9') do
                    begin
                         c[0]:=c[0]+1;
                         c[c[0]]:=ord(s[i])-ord('0');
                         i:=i+1;
                    end;
               end;
          end;
          if s[i]=';' then
          begin
               if (a[0]>0)and(b[0]>0)and(c[0]>0) then
               begin
                    for j:=1 to b[0] div 2 do
                    begin
                         y:=b[j];
                         b[j]:=b[b[0]-j+1];
                         b[b[0]-j+1]:=y;
                    end;
                    for j:=1 to a[0] div 2 do
                    begin
                         y:=a[j];
                         a[j]:=a[a[0]-j+1];
                         a[a[0]-j+1]:=y;
                    end;
                    for j:=1 to c[0] div 2 do
                    begin
                         y:=c[j];
                         c[j]:=c[c[0]-j+1];
                         c[c[0]-j+1]:=y;
                    end;
               end;

               if a[0]=0 then
               begin
                    for j:=1 to b[0] div 2 do
                    begin
                         y:=b[j];
                         b[j]:=b[b[0]-j+1];
                         b[b[0]-j+1]:=y;
                    end;
                    for j:=1 to c[0] div 2 do
                    begin
                         y:=c[j];
                         c[j]:=c[c[0]-j+1];
                         c[c[0]-j+1]:=y;
                    end;
                    scadere(c,b);
                    for j:=1 to d[0] do a[j]:=d[j];
                    a[0]:=d[0];
               end;
               if b[0]=0 then
               begin
                    for j:=1 to a[0] div 2 do
                    begin
                         y:=a[j];
                         a[j]:=a[a[0]-j+1];
                         a[a[0]-j+1]:=y;
                    end;
                    for j:=1 to c[0] div 2 do
                    begin
                         y:=c[j];
                         c[j]:=c[c[0]-j+1];
                         c[c[0]-j+1]:=y;
                    end;
                    scadere(c,a);
                    for j:=1 to d[0] do b[j]:=d[j];
                    b[0]:=d[0];
               end;
               if c[0]=0 then
               begin
                    for j:=1 to b[0] div 2 do
                    begin
                         y:=b[j];
                         b[j]:=b[b[0]-j+1];
                         b[b[0]-j+1]:=y;
                    end;
                    for j:=1 to a[0] div 2 do
                    begin
                         y:=a[j];
                         a[j]:=a[a[0]-j+1];
                         a[a[0]-j+1]:=y;
                    end;
                    adunare(a,b);
               end;
               for j:=a[0] downto 1 do
               begin
                    write(a[j]);
                    a[j]:=0;
               end;
               write('+');
               for j:=b[0] downto 1 do
               begin
                    write(b[j]);
                    b[j]:=0;
               end;
               write('=');
               for j:=c[0] downto 1 do
               begin
                    write(c[j]);
                    c[j]:=0;
               end;
               writeln(';');
               a[0]:=0;
               b[0]:=0;
               c[0]:=0;
          end;

     end;
close(output);
end.