计算大数阶乘--Pascal版

来源:互联网 发布:韩国历史知乎 编辑:程序博客网 时间:2024/05/21 22:01

先给出代码:

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 后,一切正常。