|
|
back to boardSpoiler /Спойлер/Солюшн/Хинты Задача заставила подумать. Как уже описано на форуме, нужно научиться считать количество единиц, которые встречаются в числах от 1 до X и подбирать X бинарным поиском. И вот мне этот подсчет долго не давался. Итог такой. Считать можно рекурсивно. Для этого нужно воспользоваться тем, что для чисел вида X=999...999 искомое количество единиц равно (log10(X)+1) *10^log10(X). Этот факт я заметил эксперимнтально. То есть я имею в виду count_ones (99)=20 count_ones (999)=300 count_ones (9999)=4000 и так далее. Отсюда и вытекает способ . Вычисляем сначала для X с зануленными разрядами кроме самого главного, затем прибавляем значение функции от X с зануленным главным разрядом . Я приведу пример для небольшого числа. Пусть X=666. Тогда посчитаем отдельно для 0-99, умножим на 6, прибавим к ответу; затем отдельно для 100-200, прибавим это к ответу , затем рекурсивно для 600-666 то есть просто для 0-66. Re: Spoiler /Спойлер/Солюшн/Хинты |
|
|