このプロジェクトのオイラー問題(Google chrome - 開発者ツールのスニペット機能を使用してコーディングおよび実行) を解決しようとしているときに、奇妙な動作に遭遇しました。
var palFound = false;
isPal = function (word) {
var wordCount = word.length;
for (i = 0; i < wordCount; i++) {
if (word[i] != word[wordCount - i - 1]) {
return false;
}
}
return true;
}
for (var k = 999; k >= 100; k--) {
for (var j = 999; j >= 100; j--) {
var prod = k * j,
prodString = prod + '';
if (isPal(prodString)) {
console.log(prod, k, j);
palFound = true;
break;
}
}
if (palFound) {
break;
}
}
上記のコードは、理想的には最初に遭遇した回文積を表示し、中断する必要があります。しかし、上記のコードを実行すると、995 と 583 の積である間違った答え 580085 が表示されます。
しかし、for ループの制限が 999 から 900 に変更されると (以下に示すように)、正解が表示されます - 993 と 913 の積である 906609。
for(var k=999;k >=900;k--){
for(var j=999;j>=900;j--)
理想的には、995 と 583 ではなく、993 と 913 が最初に検出される必要があります。