Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском».
Закрыт 10 месяцев назад.
Нужно создать функцию, которая будет принимать неотрицательное целое число и складывать все входящие в него цифры до тех пор, пока не останется одна цифра. Например, есть число 49:
4 + 9 = 13
1 + 3 = 4
Решение целиком писать не нужно, просто хочу понять, какой алгоритм у данной функции и с помощью чего можно её реализовать.
Число дает такой же остаток от деления на 9, как и его сумма цифр. При этом если число делится на 9 нацело, то остаток будет равен 0. А поскольку сумма цифр равна нулю только у единственного числа (0), то скорректировать это просто:
function addDigits(x) {
let m = x % 9;
return x == 0 ? 0 : m == 0 ? 9 : m;
}
console.log(addDigits(0));
console.log(addDigits(9));
console.log(addDigits(67));
console.log(addDigits(333));
console.log(addDigits(111111111));
console.log(addDigits(444));
console.log(addDigits(1111111111));
console.log(addDigits(123456789078));
.as-console-wrapper.as-console-wrapper { max-height: 100vh }
То же самое в виде гольфа:
f=x=>x?x%9||9:0
console.log(f(0));
console.log(f(9));
console.log(f(67));
console.log(f(333));
console.log(f(111111111));
console.log(f(444));
console.log(f(1111111111));
console.log(f(123456789078));
.as-console-wrapper.as-console-wrapper { max-height: 100vh }
Вот короткий и красивый вариант, кмк. Юзаем методы массивов и чуть рекурсии.
function add(str) {
if(typeof str !== 'string') {
str = str.toString();
}
let res = str.split('').reduce((acc, cur) => {
return acc += parseInt(cur);
}, 0);
if(res.toString().split('').length > 1) {
res = add(res.toString());
}
return res;
}
console.log(add(999));
console.log(add(888));
console.log(add(88));
console.log(add(1));
function sum(x) {
while (x > 9) {
for (var y=x, x=0; y; y=Math.floor(y/10)) {
x += y % 10
}
}
return x
}
console.log(sum(0))
console.log(sum(9))
console.log(sum(67))
console.log(sum(333))
console.log(sum(111111111))
console.log(sum(444))
console.log(sum(1111111111))
console.log(sum(123456789078))
.as-console-wrapper.as-console-wrapper { max-height: 100vh }
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Написал простой пример с изменением объекта в функции при передаче по ссылкеhttps://plnkr
Хочу по советоватьсяКак научиться JavaScript, то есть может есть какие либо ресурсы, книги