用free pascal编程,利用函数或过程,编写求S=1!+2!+……+n!的程序

作者&投稿:占屠 (若有异议请与网页底部的电邮联系)
这道题有这么烦么……
就算使用高精度也没这么夸张吧?
简化程序,方便阅读,方便找错

首先,函数“xiangchen”里面的e你定义成数组,但是数组赋初值不是这样的
可以用循环或者fillchar语句
其次,函数“jiechen”里面第一句,自己看看xiangchen的变量说明,要求是两个字符串运算,而o是integer,可以加个复合语句用str过程转换
其次,主程序引用“inputit”时候要加参数的~~你自己设的
再次,主程序里的“jiechen”只能做函数使用,要赋初值请到子程序那上面去
最后,outit也是要参数的……

自己编译一下不就好了么?

在语法方面的错误,1楼的已经说了,主要是传参和赋值
在逻辑上也有一些错误,例如在函数xianchen中
for i:=1 to length(e) do
while i>1 do e[i]:=e[i]+'0';
这是一个死循环
例如在sum中if n>0 then s:='1'+s; 写在for循环外,这样只能在最后才有可能加1,应该写在for循环内。

var a,b:array[1..10000]of integer;
i,j,len,n:longint;
procedure cheng(x:longint);
var i,g:longint;
begin
g:=0;
for i:=1 to 200 do
begin
a[i]:=g+a[i]*x;
g:=a[i] div 10;
a[i]:=a[i] mod 10;
end;
end;
procedure jia;
var i:longint;
begin
for i:=1 to 200 do
begin
b[i]:=b[i]+a[i];
b[i+1]:=b[i+1]+b[i] div 10;
b[i]:=b[i] mod 10;
end;
end;
begin
assign(input,'sum.in');reset(input);
assign(output,'sum.out');rewrite(output);
readln(n);
a[1]:=1;
for i:=1 to n do
begin
cheng(i);
jia;
end;
j:=200;
while a[j]=0 do j:=j-1;
for i:=j downto 1 do write(b[i]);
close(input);close(output);
end.

用PASCAL语言编写一个求1+2+3+...+N的程序~

var s,i,n:long;
begin
write('N=');
readln(n);
s:=0;
for i:=1 to n do
s:=s+i;
writeln(s);
end.

function(n)
t=1
s=0
for i=1 to n
t=t*i
s=s+t
return s