perl - 返回长字符串 1 的短阶乘计算器

perl - short factorial calculator returning long strings of 1's

我正在尝试制作一个计算数字阶乘的程序。我对 perl 不是很熟悉,所以我想我缺少一些语法规则。

当我输入 5 时,程序应该 return 120。相反,它 return 是几十个 1。当我尝试其他数字时,我仍然得到 1,但或多或​​少取决于我输入的是更大还是更小的数字。

这是我的代码:

print"enter a positive # more than 0: \n";

$num = <STDIN>;
$fact = 1;

while($num>1)
(
    $fact = $fact x $num;
    $num = $num - 1;
)

print $fact;
system("pause");

这是我第一次 post 堆栈溢出,所以我希望我遵守所有posting 规则。

问题出在这一行:

$fact = $fact x $num;

x 不是 Perl 中的乘法运算符。它用于重复事物。 1 x 5 将产生 "11111".

相反你想要 *.

$fact = $fact * $num;

可以写成*=.

$fact *= $num;

其他一些问题...

Get used to strict and warnings now。默认情况下,Perl 将允许您在不声明变量的情况下使用它们。它们是全球性的,这很糟糕,原因您稍后会了解到。现在这意味着如果你在变量名中有拼写错误,比如 $face Perl 不会告诉你。

循环数字列表最好用 for 循环 range using ..

# Loop from 1 to $num setting $factor each time.
for my $factor (1..$num) {
    $fact *= $factor;
}

不使用系统调用来暂停程序,而是使用 sleep