8377. Стойкое число

 

По числу x определим p(x) как произведение его цифр. Рассмотрим последовательность x, p(x), p(p(x))... Стойкостью x назовем индекс (начиная с 0) первого однозначного числа в этой последовательности. Например, из 99 получим последовательность 99, 9 * 9 = 81, 8 * 1 = 8. Стойкость числа 99 равна 2. По заданному числу n определите его стойкость.

 

Вход. Каждая строка содержит одно целое число n (0 ≤ n ≤ 2 * 109).

 

Выход. Для каждого значения n выведите в отдельной строке его стойкость.

 

Пример входа

Пример выхода

99

268

6

2

4

0

 

 

РЕШЕНИЕ

рекурсия

 

Анализ алгоритма

Последовательно вычисляем значения x, p(x), p(p(x)), … до тех пор, пока очередное число в последовательности не станет меньше 10. Функция p(x) вычисляет произведение цифр числа x.

 

Реализация алгоритма

Функция p(x) вычисляет произведение цифр числа x.

 

int p(int x)

{

  return (x < 10) ? x : p(x / 10) * (x % 10);

}

 

Основная часть программы. Читаем входное значение n.

 

while(scanf("%d",&n) == 1)

{

 

В переменной cnt подсчитываем количество итераций n = p(n), это и будет стойкость исходного числа.

 

  int cnt = 0;

  while(n > 9)

  {

    cnt++;

    n = p(n);

  }

 

Выводим ответ.

 

  printf("%d\n",cnt);

}