【问题标题】:perl - short factorial calculator returning long strings of 1'sperl - 返回长字符串 1 的短阶乘计算器
【发布时间】:2016-10-21 00:28:58
【问题描述】:

我正在尝试制作一个计算数字阶乘的程序。我对 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 上发帖,所以我希望我遵守所有发帖规则。

【问题讨论】:

  • 阶乘实际上定义为零 (0! = 1),因此您应该要求一个非负数

标签: perl loops syntax while-loop factorial


【解决方案1】:

问题出在这一行:

$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

【讨论】:

  • pause 不像 sleep 那样做,我认为:technet.microsoft.com/en-us/library/cc732683(v=ws.11).aspx
  • @ysth 是的。我真正认为正在发生的是Windows倾向于在程序终止时立即关闭窗口。我已经看到了这方面的变化,以防止这种情况发生。一种是使用&lt;STDIN&gt; 等到用户点击回车。
  • 另外,原始程序是完全正确的,只是它应该说print length $fact而不是print $fact。 (开个玩笑)
猜你喜欢
  • 2022-01-17
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 2012-01-10
  • 1970-01-01
  • 2015-04-19
  • 2012-04-22
相关资源
最近更新 更多