Реализовать функцию addDigits() [закрыт]

109
31 января 2020, 09:50
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском».

Закрыт 10 месяцев назад.

Нужно создать функцию, которая будет принимать неотрицательное целое число и складывать все входящие в него цифры до тех пор, пока не останется одна цифра. Например, есть число 49:

4 + 9 = 13

1 + 3 = 4

Решение целиком писать не нужно, просто хочу понять, какой алгоритм у данной функции и с помощью чего можно её реализовать.

Answer 1

Число дает такой же остаток от деления на 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 }

Answer 2

Вот короткий и красивый вариант, кмк. Юзаем методы массивов и чуть рекурсии.

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));

Answer 3

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 }

READ ALSO
webpack dinamic import

webpack dinamic import

Пытаюсь разобраться с динамическими импортами webpackКак это вижу я

104
Странное поведение Javascript при передаче объекта по ссылке

Странное поведение Javascript при передаче объекта по ссылке

Написал простой пример с изменением объекта в функции при передаче по ссылкеhttps://plnkr

141
Обучение JavaScript [дубликат]

Обучение JavaScript [дубликат]

Хочу по советоватьсяКак научиться JavaScript, то есть может есть какие либо ресурсы, книги

139