Javascript 将产品与while和for循环进行比较
我正在编写一个脚本,可以找到任何两个3位数的回文数字的所有乘积,下面是我正在编写的脚本,用于确定一个数字是否为回文数字,并比较3位数的乘积-Javascript 将产品与while和for循环进行比较,javascript,palindrome,Javascript,Palindrome,我正在编写一个脚本,可以找到任何两个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-
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();
isAlindrome函数似乎适用于长度小于17位的回文,但对于某些非回文的数字,它也会返回true,我不知道为什么
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;
在isAlindrome函数中,return true语句应该位于while循环之外。Quantastical指出了这一点 在计数器功能中,存在几个问题。i在初始化之前被分配给x。x在循环外部被赋值一次,然后再也不会更改。产品在循环之外被赋值一次,并且永远不会改变。通过使用在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);
};
函数isAlindromenum{var str=num.toString.split;返回str.join==str.reverse.join;}谢谢!这确实解决了误报问题!虽然我仍然得到一个超过17位数字的假数字,但我不明白…谢谢!我能够在第一个函数上使用Quantastical的帮助,并且消除了误报,您对第二个函数的反馈正是我所需要的,我能够让它与for和while循环一起工作,但是我认为for循环稍微简单一点,您是对的。