回 帖 发 新 帖 刷新版面

主题:一个“!”的运算

朋友,请问 1!+2!+……100!=????????

如何调试这个程序???

谢谢··

回复列表 (共17个回复)

11 楼

100!已经超过了32位机器所能表示的整数大小了!!但是求阶乘的和还是可以的!!
1楼的没有求和!3楼和7楼的都错了!!!因为a[i]没有赋初值!正确的程序应该如下:

var
i:integer;
a:array[1..100] of longint;
x:longint;

begin
a[1]:=1;
x:=a[1];
for i:=2 to 100 do
  begin
    a[i]:=a[i-1]*i;
    x:=x+a[i];
  end;
end.

12 楼

咦?我发现……
楼主问的是“如何调试这个程序???”
请各位看清楚:是“调试”啊!

也就是说,楼主已经把程序编出来了,但运行时出错,而且不懂得如何调试这程序。

楼主,如果我推理正确,请把你编的程序贴上来;如果我推理错误,也希望你表个态。

13 楼

也许他说调试只是语言上的习惯,并没有编出来。就像我用电脑总是说玩电脑

14 楼

很明显,PASCAL中没有任何一种数据类型能表示这么大的数。我个人认为使用高精度是比较好的方法

15 楼

是啊,用高精度。但不知会不会超时呢?

16 楼

我有个比较简单的方法,只要做n-2次乘法和n-1次加法,100的话绝对不会超时
不过以下程序没有经过测试

const
n=100;
var
a:array [0..300] of integer;
i:integer;

procedure jw;
var
i:integer;
begin
i:=1;
while (a[i]>0)or(i<=a[0]) do
begin
  inc(a[i+1],a[i] div 10)
  a[i];=a[i] mod 10;
  inc(i);
end;
a[0]:=i-1;
end;

procedure gc(n:integer);
var
i:integer;
begin
for i:=1 to a[0] do
  a[i]:=a[i]*n;
jw;
end;


begin
a[0]:=1;
a[1]:=n+1;
for i:=n-1 downto 2 do
begin
  gc(i);
  inc(a[1]);
end;
jw;
for i:=1 to a[0] do
  write(a[i]);
end.

17 楼

extended 是什么东东?????

我来回复

您尚未登录,请登录后再回复。点此登录或注册