Простая математика и рекурсия быстро решают эту проблему.
Напомним, что при делении числа на 10 остаток представляет собой его крайнюю правую десятичную цифру, а целая часть отношения - это число, образованное оставшимися цифрами. Другими словами:
let n = 5678;
console.log(n % 10); // => 8
console.log(Math.floor(n / 10)); // => 567
С учетом этого суммирование цифр числа является простой рекурсивной процедурой:
Процедура ( п * 1 011 *)
- Разделите n на 10.
- Установите цифру на остаток.
- Установите n на целую часть частного.
- Если n = 0, вернуть цифру .
- В противном случае вернуть цифру + Процедура ( n )
Сохранение знака для самой левой цифры добавляет небольшую сложность, но не намного. Вот как это выглядит в JavaScript:
function digitSum(n, sign=1) {
if (n < 0) {
sign = -1; // Save the sign
n = Math.abs(n);
}
const digit = n % 10; // Remainder of |n÷10|
n = Math.floor(n / 10); // Integer part of |n÷10|
if (n === 0) {
return sign * digit; // No digits left, return final digit with sign
}
return digit + digitSum(n, sign); // Add digit to sum of remaining digits
}
console.log(digitSum(32)); // => 5
console.log(digitSum(-32)); // => -1