用 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);
};
我正在编写一个脚本,该脚本将查找任何两个回文的 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);
};