119. Степень двойки

 

В строке последовательно записаны n степеней двойки, то есть числа от 2 до 2n без пробелов. Найдите значение n.

 

Вход. В одной строке без пробелов записаны n (1 ≤ n ≤ 1000) последовательных степеней двойки.

 

Выход. Вывести значение n.

 

Пример входа

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

248163264128

7

 

 

РЕШЕНИЕ

математика - логарифмы

 

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

Количество цифр в десятичной записи числа n равно . Количество цифр в десятичной записи числа 2n равно . Начнем суммировать количество цифр в числах 2, 22, 23, 24, … . Суммирование продолжаем до тех пор, пока не получим число, равное количеству цифр во входной строке.

 

Пример

Длина строки 248163264128 равна 12. Ищем такое n, для которого

 = 12

Искомым значением n будет 7.

 

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

Вычислим количество цифр len во входной строке. Читаем входные данные до символа ‘\n’.

 

len = 0;

while(scanf("%c",&ch), ch != '\n') len++;

 

В переменной res суммируем количество цифр в числах 2, 22, 23, 24, … 2i. Процесс продолжаем, пока res не станет равным числу цифр во входной строке len. Тогда значение i будет искомым.

 

res = 0;

for(i = 1; ; i++)

{

 

Количество цифр в числе 2i равно .

 

  res = res +  int(i * log10(2.0)) + 1;

  if (res == len) break;

}

 

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

 

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