簡體   English   中英

返回數組中所有回文數的總和

[英]Return the sum of all palindromic numbers in an array

我正在嘗試使用 javascript 獲取數組中回文數的總和

代碼得到輸出 0 而不是得到回文值的總和:

 function reverse(n) { var rem, res = 0 while (n > 0) { rem = n % 10 res = res * 10 + rem n = n / 10 } return res } function isPalindrome(n) { if (n == reverse(n)) return true } function sumArray(arr) { var sum = 0 for (var i = 0; i < arr.length; i++) { if (arr[i] > 10 && isPalindrome(arr[i])) { sum += arr[i] } } console.log(sum); } sumArray([12, 313, 11, 44, 9, 1])

您的reverse function 未正確實施。 例如,對於12 ,它給出Infinity 我認為更簡單的方法是先將數字轉換為字符串,然后反轉字符串:

 function isPalindrome(n) { const str = String(n); return str === [...str].reverse().join(''); } function sumArray(arr) { var sum = 0 for (var i = 0; i < arr.length; i++) { if (arr[i] > 10 && isPalindrome(arr[i])) { sum += arr[i] } } console.log(sum); } sumArray([12, 313, 11, 44, 9, 1]) console.log( 313 +11+ 44);

或者

 function isPalindrome(n) { if (n < 10) return false; const str = String(n); return str === [...str].reverse().join(''); } function sumArray(arr) { return arr.filter(isPalindrome).reduce((a, b) => a + b, 0); } console.log(sumArray([12, 313, 11, 44, 9, 1])); console.log( 313 +11+ 44);

問題在於您的reverse() function。 n = n / 10留下一些雜亂的小數,導致循環不終止。

while (n > 0) {
    rem = n % 10
    res = res * 10 + rem
    n = n / 10
}

只需四舍五入此結果即可使您的代碼按預期運行。

while (n > 0) {
    rem = n % 10
    res = res * 10 + rem
    n = Math.round(n / 10)
}

下面是帶有舍入更改的代碼

 function reverse(n) { var rem, res = 0 while (n > 0) { rem = n % 10 res = res * 10 + rem n = Math.round(n / 10) } return res } function isPalindrome(n) { if (n == reverse(n)) return true } function sumArray(arr) { var sum = 0 for (var i = 0; i < arr.length; i++) { if (arr[i] > 10 && isPalindrome(arr[i])) { sum += arr[i] } } console.log(sum); } sumArray([12, 313, 11, 44, 9, 1])

您可以簡化回文確定並使用Array.reduce確定總和

 const isPalindrome = n => n > 10 && `${n}` === [...`${n}`].reverse().join("")? n: 0; const sumOfPalindromes = arr => arr.reduce((acc, val) => acc + isPalindrome(val), 0); console.log(sumOfPalindromes([12, 313, 11, 44, 9, 1]));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM