在尝试解决此project euler problem时(使用开发人员工具中的Google chrome-snippets功能进行编码和执行),我遇到了一种奇怪的行为。
var palFound = false;
isPal = function (word) {
var wordCount = word.length;
for (i = 0; i < wordCount; i++) {
if (word[i] != word[wordCount - i - 1]) {
return false;
}
}
return true;
}
for (var k = 999; k >= 100; k--) {
for (var j = 999; j >= 100; j--) {
var prod = k * j,
prodString = prod + '';
if (isPal(prodString)) {
console.log(prod, k, j);
palFound = true;
break;
}
}
if (palFound) {
break;
}
}
上面的代码应该理想地显示第一个遇到的回文产品并且应该中断。但是当执行时,上面的代码显示错误的答案580085,它是995和583的产物。
但是当for循环限制更改为999到900(如下所示)时,会显示正确答案 - 906609,这是993和913的乘积。
for(var k=999;k >=900;k--){
for(var j=999;j>=900;j--)
理想情况下,首先应该遇到993和913,而不是995和583.我很想知道为什么会发生这种情况?
答案 0 :(得分:0)
对于外循环中的每个k值,你的内循环从999倒计数到100,所以当k为995时,j倒计数到583会找到回文并且代码会从你的循环中突破。
当您将j修改为仅计数到900时,它不会达到583,因此您现在达到的第一个palidrome是993 * 913。