PersonalCorpus 版 (精华区)
寄信人: No (hi)
标 题: 1108
发信站: 哈工大紫丁香 (2002年03月13日13:33:47 星期三)
来 源: mtlab4.hit.edu.cn
160932 05:36:00 13 Mar 2002
Bozhang,HIT,P.R.China 1108 Pascal Accepted 4.496 sec 196K
type LongInteger = record
n:array[1..14000] of integer;
len:integer;
end;
var
n:byte;
t,s,r:LongInteger;
procedure setlengthLI(var a:LongInteger;v:integer);
begin a.len:=v end;
procedure setvalueLI(var a:LongInteger;pos,v:integer);
begin a.n[pos]:=v; end;
procedure copyLI(var des,src:LongInteger);
var i:integer;
begin
for i:=1 to src.len do des.n[i]:=src.n[i];
des.len:=src.len;
end;
procedure PlusLI(var des,src1,src2:LongInteger);
var i,k:integer;
begin
i:=1; k:=0;
while (i<=src1.len) or (i<=src2.len) do begin
if i<=src1.len then des.n[i]:=src1.n[i] else des.n[i]:=0;
if i<=src2.len then des.n[i]:=des.n[i]+src2.n[i];
des.n[i]:=des.n[i]+k;
if des.n[i]>9999 then begin
k:=des.n[i] div 10000;
des.n[i]:=des.n[i] mod 10000;
end else k:=0;
inc(i);
end;
if k<>0 then begin des.n[i]:=k; des.len:=i end else des.len:=i-1;
end;
procedure MulLI(var des:LongInteger;u:integer);
var i,k:integer;
begin
if u=0 then begin setlengthLI(des,0); exit end;
if u=1 then exit;
i:=1; k:=0;
while i<=des.len do begin
des.n[i]:=des.n[i]*u+k;
if des.n[i]>9999 then begin
k:=des.n[i] div 10000;
des.n[i]:=des.n[i] mod 10000;
end else k:=0;
inc(i);
end;
if k<>0 then begin des.n[i]:=k; des.len:=i end else des.len:=i-1;
end;
procedure ShlLI(var des:LongInteger);
var i:integer;
begin
if des.len=0 then exit;
for i:=des.len downto 1 do des.n[i+1]:=des.n[i];
des.n[1]:=0;
inc(des.len);
end;
procedure MulLI2(var des,src1,src2:LongInteger);
var
i:integer;
t:LongInteger;
begin
setlengthLI(des,0);
for i:=src1.len downto 1 do begin
shlLI(des);
CopyLI(t,src2);
MulLI(t,src1.n[i]);
PlusLI(des,des,t);
end;
end;
procedure PrintLI(var des:LongInteger);
var i:integer;
begin
write(des.n[des.len]);
for i:=des.len-1 downto 1 do begin
if des.n[i]<1000 then write(0);
if des.n[i]<100 then write(0);
if des.n[i]<10 then write(0);
write(des.n[i]);
end;
writeln;
end;
begin
readln(n);
setlengthLI(t,1);
setvalueLI(t,1,1);
while n>0 do begin
dec(n);
setlengthLI(s,1);
setvalueLI(s,1,1);
plusLI(r,t,s);
printLI(r);
if n<>0 then begin mulLI2(s,t,r); copyLI(t,s) end;
end;
end.
--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: mtlab4.hit.edu.cn]
--
※ 转寄:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: mtlab4.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.861毫秒