Проблема суммы цифр. Требуется арифметическое решение
У меня есть классическая проблема с суммой цифр в JS, и я решил ее с помощью рекурсии. Предполагается, что алгоритм суммирует цифры данного числа до тех пор, пока не достигнет 1-значного результата.
Интересно, возможно ли более простое и изящное решение с арифметикой по модулю?
Я мог только думать об этом:
// initialize var to accept input
/* possible inputs to test with:
3, -7231, 1020340567.89 */
let digits = 1020340567.89;
// create a function to filter input for minuses and floating points
function isPositiveInteger(value) {
return value !== '-' && value !== '.';
}
/* create a function to turn number input into string array,
split the string,
apply filter to remove '-' and '.'
and create a new array with the numbers */
function reduceToOneInt(digits) {
digits = digits.toString().split('').filter(isPositiveInteger).map(Number);
// apply reduce to the array of numbers
let sum = digits.reduce((accumulator, currentValue) => accumulator + currentValue);
// use ternary operator to check if result is one-digit num
// re-apply function if necessary
return sum < 10 ? sum : reduceToOneInt(sum);
}
// print output to console
console.log(reduceToOneInt(digits));