1

入力として整数を指定すると、1 から始まり無限に続く自然数の連続した行の数字を計算するプログラムを Python で作成する必要があります (例: 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

より大きな数のためにそれを続ける方法がわかりません。助けてください !

4

2 に答える 2

1

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))
于 2013-10-15T21:39:49.163 に答える
1

これは、n 桁目を生成する 2 つの方程式を使用して解くことができます。こちらをご覧ください: https://math.stackexchange.com/a/626217/48057 とこちら: https://myows.com/protects/copyright/67407_mathexploration-pdf .

2 番目のリンクでは、p. を読んでください。9-12 (特に 12。実装方法に関するヒントがあるため。

于 2014-01-03T19:13:53.130 に答える