1

我只是想知道为什么这个问题会发生在我身上。如果你能帮助我,我将不胜感激。

Program factorial;
uses crt;
var
  f, i: Integer;
begin
  f:=1;
  for i:=1 to 5 do
    f:= f * i;
  write(f);
  readkey;
end.

好的,效果很好,结果是 120。这是真的。

现在,问题来了。如果我要求用户输入数字的值,它将不起作用。

Program factorial;
uses crt;
var
  i,r: Integer;
begin
  write('Enter the number');
  read(r);

  for i:=1 to r do
    r:= r * i;

  write(r);
  readkey;
end.

如果我写 5,输出将是 600。

4

3 回答 3

10

您正在使用值 r 作为循环的停止条件并修改循环中的值。

Program factorial;
uses crt;
var
    i,r, f: Integer;
begin
  write('Enter the number');
  read(r);
  f := 1;
  for i:=1 to r do
     f:= f * i;
  write(f);
  readkey;
end.
于 2009-05-29T20:56:18.830 回答
4

您重用该r变量。如果您5r您的程序输入将生效一到多次。你应该从1第一个开始f

Program factorial;
uses crt;
var
    i,r, f: Integer;
begin
    write('Enter the number');
    read(r);
    f:=1
    for i:=1 to r do
        f:= f * i;
    write(r);
    readkey;
end.
于 2009-05-29T20:56:05.697 回答
1

尝试:

Program factorial;
uses crt;
var
i,r,x: Integer;
begin
write('Enter the number');
read(x);
r:=1
for i:=1 to x do
r:= r * i;
write(r);
readkey;
end.
于 2009-05-29T20:54:41.097 回答