Cod sursa(job #46009)

Utilizator AymdTrimbitas Viorel Stefan Aymd Data 2 aprilie 2007 10:59:10
Problema Next Scor 50
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.27 kb
const o=ord('0');
var n:array[0..1000000]of shortint;
    d,r,c:array[1..17]of shortint;
    f,g:text;
    ld,ln,lc,lr,mm,i,j:longint;
    x:char;

function maimic:byte;
var i:integer;
begin
if lr>ld then maimic:=1
         else if lr<ld then maimic:=3
         else begin
              i:=1;
              while (r[i]=d[i])and(i<16) do i:=i+1;
              if d[i]=r[i] then maimic:=2
                           else if r[i]>d[i] then maimic:=1
                                             else maimic:=3;
              end;
end;

procedure tip1;
var i:longint;
begin
if (ln=1) and (n[1]=0) then write(g,0)
                       else
for i:=1 to ld do write(g,d[ld]);
close(g);
end;

procedure scad;
var i:longint;
begin
if ld=lr then for i:=1 to ld do r[i]:=r[i]-d[i]
         else for i:=2 to lr do r[i]:=r[i]-d[i-1];
for i:=lr downto 1 do
   if r[i]<0 then begin
                  r[i]:=r[i]+10;
                  r[i-1]:=r[i-1]-1;
                  end;
i:=1;
while r[i]=0 do i:=i+1;
i:=i-1;
if i>0 then for j:=1 to lr-i do r[j]:=r[j+i];
lr:=lr-i;
mm:=maimic;
end;

procedure tip2;
var i:longint;
begin
for i:=1 to ln do write(g,n[i]);
close(g);
end;

procedure tip3;
begin
lc:=ld;
ld:=lr;
lr:=lc;
c:=d;
d:=r;
r:=c;
scad;
for i:=ln-lr+1 to ln do n[i]:=n[i]+r[i-ln+lr];
for i:=ln downto 1 do
   if n[i]>9 then begin
                  n[i]:=n[i]-10;
                  n[i-1]:=n[i-1]+1;
                  end;
if n[0]>0 then i:=0
          else i:=1;
for i:=i to ln do write(g,n[i]);
close(g);
end;

begin
assign(f,'next.in');
reset(f);
while not(eoln(f)) do begin
   ln:=ln+1;
   read(f,x);
   n[ln]:=ord(x)-o;
end;
readln(f);
while not(eoln(f)) do begin
   ld:=ld+1;
   read(f,x);
   d[ld]:=ord(x)-o;
end;
lr:=ln;
if ln<=16 then for lr:=1 to lr do r[lr]:=n[lr];
assign(g,'next.out');
rewrite(g);
mm:=maimic;
if mm>1 then tip1
        else begin
             lr:=ld-1;
             for i:=1 to lr do r[i]:=n[i];
             for i:=ld to ln do begin
                lr:=lr+1;
                r[lr]:=n[i];
                mm:=maimic;
                while mm<2 do scad;
                if mm=2 then lr:=0;
             end;
             if lr=0 then tip2
                     else tip3;
             end;
end.