Найти количество шагов при складывание цифры числа
Найти количество шагов при складывание цифры числа, до тех пор пока не получится однозначное значение Например, в случае x = 5, k = 0. А в случае х = 91, к = 2. Другими словами, на первом шаге мы получим 10, на втором шаге 1. Напишите функцию решения, которая возвращает количество шагов при складывание цифры числа, до тех пор пока не получится однозначное значение для данного числа x.
Мой код
function solution(x){
var s = 0,k = 0
x = x.toString()
if ((x<10 && x>=0) || (x>-10 && x<0)) {
return 0
}
for (var i = 0; i < x.length; i++) {
s += +x[i]
k++
if (x[i]==0) {
k--
}
}
return s<10?k:solution(s)
}
console.log(solution(5)) // 0 // я получил 0
console.log(solution(91)) // 2 // я получил 1
console.log(solution(100)) // 1 // я получил 1
console.log(solution(99)) // 2 // я получил 2
console.log(solution(-5)) // 0 // я получил 0
console.log(solution(0)) // 0 // я получил 0
console.log(solution(9)) // 0 // я получил 0
console.log(solution(999)) // 2 // я получил 2
console.log(solution(1000)) // 1 // я получил 1
console.log(solution(9999)) // 2 // я получил 2
Ответы (2 шт):
раз уж написал вариант, то пусть остается. Рекурсия ваша должна возвращать число шагов иными словами - глубину этой самой рекурсии, то есть 1 + рекурсивный вызов
function solution(x){
if(Math.abs(x) < 10) return 0;
let nums = Math.abs(x).toString().split('').map(v => +v);
if(x < 0) nums[0] = -nums[0];
let sum = nums.reduce((acc,v) => acc+v, 0);
return 1 + solution(sum);
}
const input = [5,91,100,99,-5,0,9,999,1000,9999];
input.forEach(v => console.log(v, solution(v)));
в целом, конечно, для решения данной задачи рекурсия не нужна. Надо в цикле складывать цифры в сумму пока она не станет меньшей 10, и вернуть число итераций этого цикла.
День добрый!
'use strict';
function solution(x){
if ((x<10 && x>=0) || (x>-10 && x<0)) {
return 0
}
x = x.toString()
let s = 0;
let k = 0;
while (true) {
k++;
x.split('').forEach( item => s += +item );
if (s.toString().length == 1) break;
x = s.toString();
s = 0;
}
return k;
}
console.log(solution(5)) // 0 // я получил 0
console.log(solution(91)) // 2 // я получил 1
console.log(solution(100)) // 1 // я получил 1
console.log(solution(99)) // 2 // я получил 2
console.log(solution(-5)) // 0 // я получил 0
console.log(solution(0)) // 0 // я получил 0
console.log(solution(9)) // 0 // я получил 0
console.log(solution(999)) // 2 // я получил 2
console.log(solution(1000)) // 1 // я получил 1
console.log(solution(9999)) // 2 // я получил 2