Цифровой корень натурального числа
Ответ:
const digitalRootNumber = (number) => {
let digit = 0,
sum = 0;
while (number != 0) {
digit = number % 10; // получаем очередную цифру числа number
sum += digit; // суммируем цифры числа number
number = Math.trunc(number / 10); // переходим к следующей цифре числа
}
// если sum уже меньше 10, то выводим результат,
// иначе снова запускаем поиск цифрового корня, но уже для sum
return sum < 10 ? sum : digitalRootNumber(sum);
};
const digitalRootNumber2 = (number) => {
return ((number - 1) % 9) + 1;
};
Объяснение:
- Первое решение - довольно простое, с помощью последовательного нахождения остатка от деления на 10.
2. Второе решение - более рациональное, основанное на свойствах цифрового корня числа N:
- DigitalRoot(N) = n, если n <= 9.
- DigitalRoot(N) = 9, если n кратно 9
- DigitalRoot(N) = n % 9, если n не кратно 9
Складывая два этих свойства, мы получим следующую формулу:
DigitalRoot(n) = (n - 1) % 9 + 1
Подробное обоснование этих свойств вы можете найти здесь:
Код для проверки:
const digitalRootNumber = (number) => {
let digit = 0,
sum = 0;
while (number != 0) {
digit = number % 10; // получаем очередную цифру числа number
sum += digit; // суммируем цифры числа number
number = Math.trunc(number / 10); // переходим к след.цифре числа
}
// если sum уже меньше 10, то выводим результат,
// иначе снова запускаем поиск цифр.корня но уже для sum
return sum < 10 ? sum : digitalRootNumber(sum);
};
const digitalRootNumber2 = (number) => {
return ((number - 1) % 9) + 1;
};
console.log(digitalRootNumber(65536)); // 7
console.log(digitalRootNumber2(65536)); // 7