Проблема суммы цифр. Требуется арифметическое решение

У меня есть классическая проблема с суммой цифр в 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));

0 ответов

Другие вопросы по тегам