2015-11-06 53 views
0

我正在一個腳本,將找到任何兩個3位數字是迴文的所有產品,這裏是我正在努力確定一個數字是否是一個腳本回文並比較3位數字的產品 -比較產品與一段時間和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 = []; 
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位長的工作,但它也將一些數字不是迴文,我可以返回true不知道爲什麼。

palinProduct函數的思想是在while循環中for循環將遍歷x的所有值並比較產品,然後while循環將增加y然後再次運行for循環,但它不會似乎沒有工作。

+1

'函數isPalindrome(NUM){VAR海峽= num.toString()分裂( '')。返回str.join('')=== str.reverse()。join(''); }' –

回答

0

在isPalindrome功能,「返回true」語句應在while循環之外。這是由Quantastical指出的。

在計數器功能中,有幾個問題。我在初始化之前已分配給x。 x在循環之外被分配一次值,然後永遠不會改變。產品在循環之外被賦值一次,永遠不會改變。代碼可以通過使用兩個循環迭代x和y來簡化。

固定碼可能看起來像......

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); 
}; 
+0

謝謝!我能夠在第一個函數中使用Quantastical的幫助並擺脫了誤報,並且您對第二個函數的反饋正是我所需要的,我能夠使用while和while循環來處理它,但是我認爲,關於for循環稍微簡單一點, – Davez01d

0

您的誤報可能是由於您的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; 
+0

謝謝!那確實解決了誤報!雖然我仍然在任何超過17位數字的錯誤,不明白... – Davez01d