我正在尝试用Javascript中最大的回文产品解决Project Euler问题,我不明白为什么程序没有进入IF语句if (number.toString() == number.toString().split('').reverse().join(''))
:
(function palyndrom(max, min) {
top:
for (i = max; i > min; i--) {
for (c = max; c > min; c--) {
if(i*c == c*i) {
alert('same was before');
}
else {
var number = i*c;
console.log('i*c = ' + i + '*' + c + ' = ' + number);
//this if not entered, alert doesn't work
if (number.toString() == number.toString().split('').reverse().join('')) {
alert('PALYNDROM FOUND: i*c = ' + i + '*' + c + ' = ' + number);
break top;
}
}
}
}
})(999, 900);
答案 0 :(得分:4)
i*c == c*i
总是会导致真实的。该功能永远不会到达其他部分。我想你想做的是
i === c
代替:
(function palyndrom(max, min) {
top:
for (var i = max; i > min; i--) {
for (var c = max; c > min; c--) {
if (i === c) {
alert('same was before');
} else {
var number = i * c;
console.log('i*c = ' + i + '*' + c + ' = ' + number);
if (number.toString() == number.toString().split('').reverse().join('')) {
alert('PALYNDROM FOUND: i*c = ' + i + '*' + c + ' = ' + number);
break top;
}
}
}
}
} )(999, 900);
答案 1 :(得分:0)
您错过了一个导致错误的“}” 除此之外,i * c总是等于c * i。 我修改了片段,以便它返回第一个回文。第二个函数返回所有回文的数组。 您无需验证我!== c。
(function palindrome(max, min) {
for (var i = max; i > min; i--) {
for (var c = max; c > min; c--) {
var number = i * c;
if (number.toString() == number.toString().split('').reverse().join('')) {
console.log('PALINDROME FOUND: i*c = ' + i + '*' + c + ' = ' + number);
return number;
}
}
}
})(999, 900);
//PALINDROME FOUND: i*c = 993*913 = 906609
(function palindrome(max, min) {
var palindromes = {};
for (var i = max; i > min; i--) {
for (var c = max; c > min; c--) {
var number = i * c;
if (!(number in palindromes) && number.toString() == number.toString().split('').reverse().join('')) {
palindromes[number] = 1;
}
}
}
return Object.keys(palindromes);
})(999, 900);
//["819918", "824428", "861168", "886688", "888888", "906609"]