0

在尝试解决这个项目的 euler 问题(使用 Google chrome - 开发人员工具中的代码片段功能进行编码和执行)时,我遇到了一个奇怪的行为。

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。我很想知道为什么会发生这种情况?

4

1 回答 1

0

对于外循环中的每个 k 值,您的内循环从 999 倒数到 100,因此当 k 为 995 时,j 倒数到 583 会找到回文并且代码会跳出循环。

当您将 j 修改为仅倒数到 900 时,它不会达到 583,因此您现在达到的第一个回文数是 993 * 913。

于 2013-10-14T08:43:35.650 回答