Сколько цифр в нумерации страниц

тема: Арифметика и формулы (O(1)) · уровень: базовый

Условие

В школьной библиотеке решили пронумеровать страницы в новом сборнике задач: на первой странице написали «1», на второй — «2» и так далее до страницы N.

Завхоз попросил понять, сколько всего цифр уйдёт на такую нумерацию (то есть суммарная длина всех записанных номеров страниц).

Важно: N может быть очень большим, так что ответ может не помещаться в 32-битный тип (как на олимпиадах). В Python это не проблема.

Формат ввода

Одно целое число N.

Формат вывода

Выведите одно целое число — сколько цифр будет написано в номерах страниц от 1 до N включительно.

Ограничения

Пример

Ввод:

13

Вывод:

17

Пояснение: номера 1…9 дают 9 цифр, а 10…13 дают ещё 8 цифр (четыре двузначных номера). Итого 17.

Как решать — идея подхода

Приём: Группировка по разрядам (подсчёт блоками)

Ключевое наблюдение: номера страниц с одинаковым количеством цифр образуют непрерывный блок, и каждый номер в блоке даёт одинаковый вклад в ответ.

Например, все двузначные номера (10…99) дают по 2 цифры каждый, значит их вклад равен кол-во_чисел * 2. То же самое для 1-значных, 3-значных и т.д. Поэтому вместо перебора 1…N (слишком долго) можно пройтись по блокам разрядов.

План:

Время: O(log10 N), потому что блоков максимум 10 (для N до 1e9). Память: O(1).

Частая ошибка: забыть ограничить последний блок числом N (использовать 99/999/… как конец всегда) или перепутать границы, потеряв +1 в end - start + 1.

Разберись руками

Представь, что в книге страницы нумеруют подряд от 1 до 13. Мы хотим узнать, сколько всего цифр будет написано, если выписать все номера страниц.

Идея: Разбей все номера страниц на группы по количеству цифр (однозначные, двузначные, трёхзначные и т.д.). Для каждой группы посчитай, сколько там страниц, умножь на число цифр в одном номере этой группы, а потом сложи вклад всех групп.

Решить задачу с автопроверкой на Python →

Куда дальше