过去几周我一直在教自己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时,它确实找到了它。
答案 0 :(得分:3)
我终于在你的问题上阅读了问题描述;)你的循环没有以所需的顺序迭代。例如998*998
之后遇到999*100
。