先给出代码:
program fac;
var
i,j,n,len: integer;
rad,c,r: longint;
buff: array[1..16000] of integer;
num: string[5];
begin
writeln('calculate n!');
write('n=?');
read(n);
rad:=10000;
len:=1;
buff[1]:=1;
for i:=1 to n do
begin
c:=0;
for j:= 1 to len do
begin
r := buff[j] * i +c;
buff[j] := r mod rad;
c := r div rad;
end;
if c>0 then
begin
len:=len+1;
buff[len]:=c;
end;
end;
write('n!=',buff[len]);
for i:=len-1 downto 1 do
begin
str(buff[i],num);
if length(num)<4 then
write(copy('0000',1,4-length(num)));
write(buff[i]);
end;
END.
说明:
开发环境: Free Pascal 2.4 (是一个dos程序,感觉和Turbo Pascal类似)
下载页面: http://down.tech.sina.com.cn/page/46658.html
Free Pascal 设置:
1. Dos 窗口代码页设为437(美国),否则会乱码。
2. Options->Compiler mode 设为 Turbo Pascal compatible
学习资料:
PASCAL语言培训教程,下载页面 http://www.05sun.com/downinfo/5433.html
下载,安装Free Pascal. 学习、编写和调试这个程序总共约花了2个小时。
曾经遇到的问题:
1. 变量r定义为integer导致数据溢出
2. 参数递减的for误用了to 关键字,改成 downto 后,一切正常。