用 while 和 for 循环比较产品

comparing products with a while and for loop

我正在编写一个脚本,该脚本将查找任何两个回文的 3 位数的所有乘积,这是我正在编写的脚本,用于确定一个数字是否为回文并比较这些乘积3 位数 -

var isPalindrome = function(number) {
var number = number.toString();
var length = number.length;
var x = 0;
var y = 1;
while (x<=(length/2)) {
    if(number[x]==number[length-y]) {
        x++;
        y++;
    } else {
        return false;
    }
    return true;
}
};

var counter = function() {
var palindromeProducts = [];
var x = i;
var y = 100;
var product = x*y; 
while (y<1000) {
    for (i=100; i<1000; i++) {
        if (isPalindrome(product)) {
            palindromeProducts.push(x*y);
        }
    }
    y++;
}
console.log(palindromeProducts);
};

counter();

isPalindrome 函数似乎适用于长度小于 17 位的回文,但它也 returns 对某些不是回文的数字有效,我不明白为什么。

palinProduct 函数的想法是,在 while 循环内,for 循环将遍历 x 的所有值并比较乘积,然后 while 循环将增加 y,然后 运行 for 循环再次,但它似乎没有用。

您的误报可能是您的 isPalindrome 函数中不正确的 while 循环的结果。该函数在循环的第一次迭代中返回 true...

while (x<=(length/2)) {
    if(number[x]==number[length-y]) {
        x++;
        y++;
    } else {
        return false;
    }
    return true; // this is in the wrong place, I believe
}

我想你打算做的是:

while (x<=(length/2)) {
    if(number[x]==number[length-y]) {
        x++;
        y++;
    } else {
        return false;
    }
}
return true;

在isPalindrome函数中,"return true"语句应该在while循环之外。 Quantastical 指出了这一点。

在计数器函数中,有几个问题。 i 在 i 初始化之前分配给 x。 x 在循环之外被分配了一个值,然后就再也没有改变过。 product 在循环之外被赋值一次并且永远不会改变。可以通过使用两个在 x 和 y 上迭代的 for 循环来简化代码。

固定代码可能类似于...

var isPalindrome = function(number) {
    var number = number.toString();
    var length = number.length;
    var x = 0;
    var y = 1;
    while (x<=(length/2)) {
        if(number[x]==number[length-y]) {
            x++;
            y++;
        } else {
            return false;
        }
    }
    return true;
};

var counter = function() {
    var palindromeProducts = [];
    for (var x = 100; x < 1000; x++) {
        for (var y = 100; y < 1000; y++) {
            var product = x*y; 
            if (isPalindrome(product)) {
                palindromeProducts.push(product);
            }
        }
    }
    console.log(palindromeProducts);
};