[英]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.