2013-10-15 31 views
1

我需要編寫一個python程序,給定一個整數作爲輸入,計算一個自然數的連續行中的數字,從1開始並繼續到無限(例如12345678910111213141516171819202122等...)例如,如果我們輸入17它計算在這一行中的第17位,這是3.在Python中解決方程。計算第n位

我寫了一個程序,可以計算到第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 

我不知道如何繼續更大的數字。 請幫忙!

回答

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