用Python解决方程式。计算第n位数

时间:2013-10-15 21:10:31

标签: python python-3.x integer digits equation-solving

我需要在python中编写一个给出整数的程序,因为输入计算一个连续的自然数行中的数字,从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

我不知道如何继续使用更大的数字。 请帮忙!

2 个答案:

答案 0 :(得分:1)

一种方法是将每个数字转换为字符串,并将它们全部链接在一个无限的生成器中。然后从一开始就忽略一定数量的字符,然后选择下一个字符......,例如:

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))

答案 1 :(得分:1)

这可以使用将生成第n个数字的两个等式来解决。 请看这里:https://math.stackexchange.com/a/626217/48057 在这里:https://myows.com/protects/copyright/67407_mathexploration-pdf

在第二个链接中,请通读p。 9-12(特别是12,因为有一些关于如何实施的提示。

相关问题