Pagini recente » Cod sursa (job #2776621) | Cod sursa (job #2305342) | Cod sursa (job #2703788) | Cod sursa (job #2464862) | Cod sursa (job #46991)
Cod sursa(job #46991)
{ Next/preONI 2007 runda 4 }
program sdf;
var n,dv,r:array[0..1000000] of integer;
d,aux,t:longint;
f:text;
i,control,j:integer;
c:char;
begin
{ citire date de intrare }
assign(f,'next.in');reset(f);
n[0]:=0;
while not eoln(f) do begin
read(f,c);
n[0]:=n[0]+1;
val(c,n[n[0]],control);
end;
readln(f);
read(f,d);
close(f);
{ inversez vectorii }
for i:=1 to n[0] div 2 do begin
aux:=n[i];
n[i]:=n[n[0]-i+1];
n[n[0]-i+1]:=aux;
end;
{ calculez n mod d }
t:=0;i:=n[0];
while i>0 do begin
t:=t*10+n[i];
t:=t mod d;
i:=i-1;
end;
{ memorez pe t in vectorul R si pe d in DV }
if t<>0 then begin
r[0]:=0;
repeat
r[0]:=r[0]+1;
r[r[0]]:=t mod 10;
t:=t div 10;
until t=0;
dv[0]:=0;aux:=d;
repeat
dv[0]:=dv[0]+1;
dv[dv[0]]:=aux mod 10;
aux:=aux div 10;
until aux=0;
{ scad pe R din DV }
t:=0;i:=1;
while (i<=dv[0])or(t>0) do begin
dv[i]:=dv[i]-r[i]-t;
if dv[i]<0 then t:=1
else t:=0;
dv[i]:=dv[i]+t*10;
i:=i+1;
end;
while (dv[0]>1)and(dv[dv[0]]=0) do
dv[0]:=dv[0]-1;
{ impart DV la D }
t:=0;i:=dv[0];
while i>0 do begin
t:=(t*10+dv[i]) mod d;
i:=i-1;
end;
{ adun la n pe t }
r[0]:=0;
repeat
r[0]:=r[0]+1;
r[r[0]]:=t mod 10;
t:=t div 10;
until t=0;
i:=1;t:=0;
while (i<=n[0])or(i<=r[0])or(t>0) do begin
t:=t+n[i]+r[i];
n[i]:=t mod 10;
t:= t div 10;
i:=i+1;
end;
n[0]:=i-1;
t:=100;
end;
{ afisare }
assign(f,'next.out');rewrite(f);
if t=0 then write(f,0)
else for i:=n[0] downto 1 do write(f,n[i]);
close(f);
end.