|
计算n!
[这个贴子最后由luyuanhong在 2010/10/17 11:32am 第 3 次编辑]
下面引用由寂寞笑在 2010/10/15 06:08pm 发表的内容:
我初学数论,遇到很多不会的问题,比如:
使n!少于1000位的数字n的最大值是多少?为什么?(用程序实现。)
请高手指点一下,并说明有关理论依据。谢谢。
因为 n! 就是从 1,2,3,… 开始,一直连乘到 n ,所以,要求使得 n! 少于 1000 位
的数字 n 的最大值,只要从 1,2,3,… 开始连乘,直到 n! 的数值超过 10^999 就可以了。
在编程序实现时,要考虑到防止数值太大、发生溢出的问题,所以,应采用“取对数,
把连乘变成连加”的办法。
下面是用 Pascal 语言编写的程序:
{$N+}
var s:real; n:integer;
begin
s:=0; n:=0;
while(s+ln(n+1)<999*ln(10))do
begin
n:=n+1; s:=s+ln(n);
end;
writeln(';n=';,n);
end.
这个程序运算的结果,得到 n=449 。
事实上,有
449!≈3.8519305×10^997 ,450!≈1.7333687×10^1000 。
可见 449! 不到 10^999 ,而 450! 就超过 10^999 了。 |
|