计算大数阶乘--Pascal版

先给出代码:

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

你可能感兴趣的:(计算大数阶乘--Pascal版)