Сложение квадратов цифр числах, пока не станет 1

79
17 сентября 2019, 11:40

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

x=23 -> 2^2+3^2=13 -> 1^2+3^2=10 -> 1^2+0^2=1 -> true

x=22 -> 2^2+2^2=8 -> false

Числа могут быть разными, например 0, 1, 12, 123, 1234... Если задано такое число, что в конце станет 1, то пусть возвращает true, а если нет - false. Есть и такие числа, которые бесконечно будут повторять действие, тогда, когда в какой-то части будет повторятся одно и те-же цифры. В током случае тоже пуст возвращает false. (Не использовать prototype.) В моих примерах коды делают это только один раз. Наверно нужно делать по циклу while (Например: while (x!=1){...}), но не знаю как.

код 1

function solution(x) {
  let s=0;
  x = x.toString().split('');
  for (let i=0; i<x.length; i++) {
    s += Math.pow(x[i],2);
  }
   if (s==1) {
      return true
    }
    return false
}
console.log(solution(23));

код 2

function solution(x) {
let y;
    y=(x + '').split('')
              .map(b => parseInt(b))
              .reduce((a,b) => a += b * b, 0);
    if (y==1) {
      return true
    }
    return false
}
  console.log(solution(23));
Answer 1

У вас в целом правильная логика для решения такой задачи, единственное что если неизвестно заранее количество итераций, которое необходимо совершить, то имеет смысл использовать Рекурсивный подход с указанием условия, когда нужно завершить повторный вызов функции:

            function test(value) { 
                if (value.toString().length == 1) { 
                    if (value == 1) { 
                        console.log(value); 
                        return true; 
                    } else { 
                        console.log(value); 
                        return false; 
                    } 
                } 
                value = value.toString().split(""); 
                value = value 
                    .map(e => Number(e) * Number(e)) 
                    .reduce((accum, e) => accum + e); 
                return test(value); 
            } 
 
            test(23);

READ ALSO
Как парсить csv json-парсером от OKTELL

Как парсить csv json-парсером от OKTELL

Товарищи, ниже у меня есть пример, для парсера в Oktell, как мне заставить его читать файлcsv?

78
Два слайдера на одной странице

Два слайдера на одной странице

на странице есть два вот таких блока:

107