Perl for-loop没有按预期工作

时间:2014-01-03 21:37:17

标签: perl for-loop

过去几周我一直在教自己Perl。为了练习,我一直在projecteuler.net上遇到问题。我有一对嵌套的for循环没有按预期工作。对于上下文,问题是找到最大的回文数,它是两个3位数字的乘积。这是我的代码:

sub isPalindrome($)
{
    return 0 if length($_[0]) <= 1;
    $reverse = reverse $_[0];
    $_[0] == $reverse ? return 1 : return 0;
}

sub findPalindrome{
        for($i = 999; $i >= 100; $i--)
        {
            for($j = 999; $j >= 100; $j--)
            {
                print "$i\t$j\n";
                return ($i, $j, $j * $i) if(isPalindrome($j * $i)); #return the two factors followed by their product#
            }
        }   
}

($factor1, $factor2, $product) = findPalindrome();


print "$factor1 * $factor2 = $product\n";

我的问题是sub findPalindrome没有按预期工作。我找到了一个回文号,但不是最高的;它就像它在循环中跳过一些东西。为了尝试追踪问题,我插入了上面的代码行,使其打印出它迭代的每对数字,看起来它正在迭代。我的猜测是,Perl中的for循环的工作方式与我在C ++中的习惯不同;无论哪种方式,我都输了。我错过了什么?

编辑:我得到的答案是“995 * 583 = 580085”,这确实是一个回文数字,并且乘法是正确的,但根据Project Euler,这是错误的答案。一时兴起,我改变了sub findPalindrome中的for循环,迭代了999到900,这给了我正确答案(“993 * 913 = 906609”)。出于某种原因,当范围的底部是100时,它找不到答案;当范围的底部是900时,它确实找到了它。

1 个答案:

答案 0 :(得分:3)

我终于在你的问题上阅读了问题描述;)你的循环没有以所需的顺序迭代。例如998*998之后遇到999*100