| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
大家帮我看一下好吗?var
t:int64;
a,b,c,temp:array[0..100]of int64;
procedure inct;
var
i,j,k:int64;
begin
k:=temp[0];
i:=1;
inc(temp[1]);
while temp[i]>=10 do
begin
temp[i]:=temp[i] mod 10;
inc(i);
inc(temp[i]);
end;
if i>k then temp[0]:=i;
end;
procedure inct2(l:int64);
var
i,j,k:int64;
begin
k:=temp[0];
i:=1;
temp[1]:=temp[1]+l+l+1;
while temp[i]>=10 do
begin
temp[i+1]:=temp[i+1]+temp[i] div 10;
temp[i]:=temp[i] mod 10;
inc(i);
end;
if i>k then temp[0]:=i;
end;
procedure main;
var
r,s,i,j,k,l,m,n,h,x:int64;
i1:longint;
begin
k:=t;
j:=1;
m:=9;
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
fillchar(c,sizeof(c),0);
while k>m*j do
begin
k:=k-m*j;
inc(j);
m:=m*10;
end;
n:=m div 10;
n:=n+k div j;
s:=k mod j;
l:=n;
fillchar(temp,sizeof(temp),0);
while l>0 do
begin
inc(temp[0]);
r:=temp[0];
temp[r]:=l mod 10;
l:=l div 10;
end;
if s=0 then
begin
a[1]:=n mod 10;
inct;
h:=temp[0];
r:=2;
for i1:=r to r-1+h do a[i1]:=temp[h-i1+r];
r:=r+h-1;
end
else
begin
inct;
h:=temp[0];
r:=h-s+1;
for i1:=1 to r do a[i1]:=temp[r+1-i1];
end;
inc(r);
while r<50 do
begin
inct;
h:=temp[0];
for i1:=r to r-1+h do if i1<=50 then a[i1]:=temp[h-i1+r]else break;
if r+h<50 then r:=r+h else r:=50;
end;
k:=t;
m:=1;
n:=0;
j:=0;
s:=0;
while k>j*s do
begin
k:=k-j*s;
inc(j);
m:=m*10;
i:=trunc(sqrt(m-1));
s:=i-n;
n:=i;
end;
n:=i-s;
n:=n+k div j;
s:=k mod j;
l:=n*n;
fillchar(temp,sizeof(temp),0);
while l>0 do
begin
inc(temp[0]);
r:=temp[0];
temp[r]:=l mod 10;
l:=l div 10;
end;
l:=n;
if s=0 then
begin
b[1]:=temp[1];
inct2(l);
inc(l);
h:=temp[0];
r:=2;
for i1:=r to r-1+h do b[i1]:=temp[h-i1+r];
r:=r-1+h;
end
else
begin
inct2(l);
inc(l);
h:=temp[0];
r:=h-s+1;
for i1:=1 to r do b[i1]:=temp[r+1-i1];
end;
inc(r);
while r<50 do
begin
inct2(l);
inc(l);
h:=temp[0];
for i1:=r to r-1+h do if i1<=50 then b[i1]:=temp[h-i1+r]else break;
if r+h<50 then r:=r+h else r:=50;
end;
for i1:=50 downto 2 do
begin
c[i1]:=c[i1]+a[i1]+b[i1];
if c[i1]>=10 then begin inc(a[i1-1]);c[i1]:=c[i1]mod 10;end;
end;
c[1]:=c[1]+a[1]+b[1];
r:=c[1] mod 10;
writeln(r);
end;
begin
readln(t);
while t<>0 do
begin
main;
readln(t);
end;
end.
总是wa,不知为什么,郁闷ing
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator