PASCAL程序求解(输入一个数求阶乘)

来源:百度知道 编辑:UC知道 时间:2024/05/12 15:56:24
输入一个自然数 n ,求出n的阶乘(1*2*3*4*5*...*n);要求使用FOR 循环。
我是这样做的:

program jiecheng;
VAR s,i,n:integer;
begin
s:=0;
readln(n);
FOR i:=1 to n do s:=s*(s+i);
writeln(s);
readln;
end.

可以运行 但是有问题 因为s初值是0,那么do 后面的语句 s*(s+i) 也是0了.可是又不能改成1,那样就是 1的阶乘等于 2了……

问一下大家是怎么解这道题的??或者我的程序怎么改?

你的程序写得非常好,时间效率是O(n)的。但可惜,你的程序求的是1!+2!+3!+...+n!,而题目求的是n!
如果是求前者,把s赋值为1,如果n=1的话特殊处理一下就可以了。
如果是求n!,就把s*(s+i)变成s*i
program jiecheng;
VAR s,i,n:integer;
begin
s:=1;
readln(n);
if n<>1 then
FOR i:=1 to n do s:=s*(s+i);
writeln(s);
readln;
end.

program jiecheng;
VAR s,i,n:integer;
begin
s:=1;
readln(n);
FOR i:=0 to n-1 do s:=s*(s+i);
writeln(s);
readln;
end.