Cod sursa(job #133643)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 9 februarie 2008 13:20:48
Problema Next Scor 80
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.22 kb
program next;
var f,g:text;
    x,p:string;
    v,b:array[1..1000000]of char;
    d,a,r:int64;
    k,l,n,c,i,t:longint;
    aux:char;
    cod:integer;
    m:array[1..1000000] of longint;
begin
assign(f,'next.in');
assign(g,'next.out');
reset(f);
rewrite(g);
while not seekeoln(f) do
  begin
    n:=n+1;
    read(F,v[n]);
  end;
read(f,d);
if (d=1)then
  for i:=1 to n do write(g,v[i])
else
begin
str(d,x);
l:=length(x);
c:=l;
p:='';
for i:=1 to l do p:=p+v[i];
if (v[1]<x[1])then
  begin
    p:=p+v[l+1];
    c:=c+1;
  end;
val(p,a,cod);
r:=a mod d;
for i:=c+1 to n do
  begin
    a:=r*10+(ord(v[i])-ord('0'));
    r:=a mod d;
  end;
r:=d-r;
l:=0;
while (r<>0)do
  begin
    k:=r mod 10;
    r:=r div 10;
    l:=l+1;
    b[l]:=chr(ord('0')+k);
  end;
for i:=1 to l div 2 do
  begin
    aux:=b[i];
    b[i]:=b[l-i+1];
    b[l-i+1]:=aux;
  end;
for i:=n-l+1 to length(v) do
  b[i]:=b[i-(n-l)];
for i:=1 to n-l do
  b[i]:='0';
t:=0;
for i:=n downto 1 do
  begin
    m[i]:=t+ord(v[i])-ord('0')+ord(b[i])-ord('0');
    t:=m[i] div 10;
    if (m[i]>=10)then
      m[i]:=m[i] mod 10;
  end;
if (t>0)then write(g,t);
for i:=1 to n do
  write(g,m[i]);
end;
close(f);
close(G);
end.