我正在重做Javascript中的Project Euler挑战。任务是得到最大的回文数(https://projecteuler.net/problem=4)。现在我得到以下代码:
var lpp = 0;
for (var a = 0; a < 1000; a++) {
for (var b = 0; b < 1000; b++) {
var str = (a*b).toString();
if (str.charAt(0) === str.charAt(5)) {
if (str.charAt(1) === str.charAt(4)) {
if (str.charAt(2) === str.charAt(3)) {
lpp = str;
}
}
}
}
}
console.log(lpp);
代码的输出是580085,我知道这是错误的答案,因为我以前在Python中遇到了挑战。
答案 0 :(得分:2)
你几乎就在那里。您的代码存在的问题是它只存储了找到的最后回文,这不一定是最大的。如果我们稍稍调整代码并添加一个检查,表明当前评估的产品确实比之前找到的回文大,那么您将得到正确答案(906609):
var lpp = 0;
for (var a = 0; a < 1000; a++) {
for (var b = 0; b < 1000; b++) {
var tmp = a*b;
if (tmp < lpp) {
continue;
}
var str = tmp.toString();
if (str.charAt(0) === str.charAt(5)) {
if (str.charAt(1) === str.charAt(4)) {
if (str.charAt(2) === str.charAt(3)) {
lpp = tmp;
}
}
}
}
}
console.log(lpp);
&#13;
答案 1 :(得分:2)
您只是不要检查新发现的回文是否高于找到的
。此外,只迭代3位数字并使用str.split("").reverse().join("")
进行字符串恢复。
var lpp = 0
for (var a = 100; a < 1000; a++)
for (var b = 100; b < 1000; b++)
{
var mult = a * b
var str = (mult).toString()
if (str == str.split("").reverse().join("") && mult > lpp)
lpp = mult
}
console.log(lpp)
&#13;
答案 2 :(得分:0)
试试这个......
var lpp = 0;
for (var a = 0; a < 1000; a++) {
for (var b = 0; b < 1000; b++) {
var str = (a * b).toString();
var j = str.length - 1;
var count = 0;
for (var i = 0; i < str.length ; i++) {
if (str.charAt(i) != str.charAt(j)) {
count++;
break;
}
j--;
}
if (count == 0)
lpp = str;
}
}
console.log(lpp);