perl - 短因子计算器返回1' s

时间:2016-10-21 00:28:58

标签: perl loops syntax while-loop factorial

我试图制作一个计算数字阶乘的程序。我对perl不是很熟悉,所以我觉得我错过了一些语法规则。

当我输入5时,程序应该返回120.而不是它返回几十个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");

这是我发布Stack Overflow的第一篇文章,所以我希望我遵守所有这些规则。

1 个答案:

答案 0 :(得分:5)

问题在于这一行:

$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就不会告诉你它。

使用range using ..上的for循环可以更好地完成对数字列表的循环。

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

使用sleep

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