Google Chrome开发人员工具在嵌套for循环中不一致

时间:2013-10-13 14:56:36

标签: javascript google-chrome google-chrome-devtools code-snippets

在尝试解决此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.我很想知道为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

对于外循环中的每个k值,你的内循环从999倒计数到100,所以当k为995时,j倒计数到583会找到回文并且代码会从你的循环中突破。

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