Блог пользователя perec1970

Автор perec1970, история, 23 месяца назад, По-русски

Здравствуйте. Подскажите кто-нибудь как найти сумму цифр всех чисел на заданном интервале от A до B. А и В до 10^9 степени. Спасибо.

  • Проголосовать: нравится
  • -8
  • Проголосовать: не нравится

»
23 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Чтобы решить задачу, нужно заметить несколько важных моментов. Первое: пусть f(A) — сумма цифр всех чисел от 1 до A. Тогда ответ на задачу это f(B) - f(A - 1). Теперь научимся считать f(A). Для начала посчитаем кол-во цифр len(A) в числе А. Теперь прибавим к ответу сумму цифр всех чисел x, таких, что len(x) < len(A). Это можно сделать, учтя сразу все числа одной длины. Делается как-то комбинаторно одной формулой, остается на рассмотрение читателю. Теперь посмотрим на цифру, отвечающую за наибольший разряд — A[0] числа А. В ответ точно войдут суммы цифр всех таких чисел х, что len(x) == len(A) и x[0] < A[0]. Тогда перебрав цифру или учтя сразу все цифры < A[0] и, опять же, посчитав суммарное кол-во цифр в последовательностях цифр длины len(A) - 1, мы можем учесть все числа такой же длины, что и А, но имеющих первую цифру меньше, чем у А. Остались неучтенными только те числа х, такие, что len(x) == len(A) && x[0] == A[0]. Теперь у нас есть фиксированный префикс числа, состоящий из A[0] и задача, почти аналогичная тому, чтобы найти кол-во чисел, равных по длине А и имеющих нулевую цифру равную нулевой цифре А. Повторим решение и перейдем к совпадающему префиксу A[0],A[1]. Будем повторять это, пока совпадающим префиксом не станет само число A.

Не уверен на 100%, что решение работает, но звучит весьма убедительно. Довольно неприятная задача, как и почти любая задача, связанная с цифрами. В особенности, ДП по цифрам.