Я изучаю Python через задачи Project Euler. Для задачи 40 я написал этот код:
import math
i = 1
counter = 0
while counter <= 1000000:
MMM = int(math.log(i, 10)) + 1
counter = counter + MMM
V = math.log(i, 10)
print(i, counter, MMM, V)
i += 1
Предполагается вернуть номер, содержащий N-ю цифру. По сути, это должно отслеживать, что произойдет, если я объединю целые числа от 1 до любого числа в другое число. Цель состоит в том, чтобы определить, что такое конкретная цифра. Этот код работает ниже определенного порога, однако к тому времени, когда он достигает миллионной цифры, он становится на единицу. Что мне здесь не хватает? Я видел другие реализации, которые экономят время, но меня больше интересует, почему в какой-то момент счет становится неправильным
Edit:
замена
MMM = int(math.log(i, 10)) + 1
с
MMM = len(str(i))
работает как чемпион!
Хотя было бы неплохо иметь полностью числовое решение, придется подождать, пока я не смогу доверять функциям журнала в Python.