Решение уравнения в Python. Вычисление n-й цифры

Мне нужно написать программу на питоне, которая, учитывая целое число в качестве входных данных, вычисляет цифру в непрерывной строке натуральных чисел, начиная с 1 и продолжая до бесконечности (например, 12345678910111213141516171819202122 и т. д.) Так, например, если мы вводим 17, он вычисляет 17-я цифра в этом ряду, то есть 3.

Я написал программу, которая может вычислять до 189-й цифры, но мне нужно сделать это для очень большого числа (до позиции 2 ** 31-1)

def digit_finder():
    if pos < 10: #Position is equal to digit.
        digit=pos
        return(digit)

    elif pos >= 10 en pos < 189: #Number between 10 and 99.
        number=(pos-9) 
        if pos%2==0: 
            new_number=(10+(number//2))
            digit=(new_number//10)
            return digit
        else: 
            new_number=(9+(number//2))
            digit=(new_number-((new_number//10)*10))
            return digit

Я не знаю, как продолжить это для больших чисел. Пожалуйста помоги !


person buster    schedule 15.10.2013    source источник


Ответы (2)


Один из способов — преобразовать каждое число в строку и связать их все вместе в бесконечном генераторе. Затем вы игнорируете с самого начала определенное количество символов, а затем берете следующий..., например:

from itertools import chain, count, islice

def digit_finder(n):
    digits = chain.from_iterable(str(i) for i in count(1))
    return int(next(islice(digits, n - 1, None)))

print(digit_finder(17))
person Jon Clements♦    schedule 15.10.2013

Это можно решить с помощью двух уравнений, которые будут генерировать n-ю цифру. Пожалуйста, посмотрите здесь: https://math.stackexchange.com/a/626217/48057 и здесь: https://myows.com/protects/copyright/67407_mathexploration-pdf.

Во второй ссылке, пожалуйста, прочитайте п. 9-12 (особенно 12, так как есть несколько советов, как это можно реализовать.

person Artem    schedule 03.01.2014
comment
Спасибо за ваш ответ ! - person buster; 15.01.2014