怎样计算大数阶乘? 最好有程序.

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 07:21:39

怎样计算大数阶乘? 最好有程序.
怎样计算大数阶乘? 最好有程序.

怎样计算大数阶乘? 最好有程序.

我在网上找到了一个计算大数阶乘位数的算法,效率相当可观:

例如1000阶乘位数:

log10(1)+log10(2)+···+long10(1000)取整后加1

或者

log(N!)=lnN!/ln10

=(NlnN-N)/ln10

=2565.7

so

N!=10^2565.7

=10^.7*10^2565

=5.01e2565


然后,计算大数阶乘,只能靠计算机,用高精度,程序如下:

var a:array[1..10000000]of longint;

    n,i,j,ans,mark:longint;


procedure findmark;

var i:longint;

begin

 for i:=10000000 downto 1 do

  if a[i]>0 then

  begin

   mark:=i;

   exit;

  end;

end;


begin     

 a[1]:=1;

 readln(n);


 for i:=2 to n do

 begin

  ans:=0;

  mark:=mark+5;

  for j:=1 to mark+5 do

  begin

   a[j]:=a[j]*i+ans;

   ans:=a[j] div 10;

   a[j]:=a[j] mod 10;

  end;

 end;


 findmark;

 for i:=mark downto 1 do

  write(a[i]);

 writeln;                         

end.


这里还附上一个可执行文件,输入n,可以输出n!