2015-05-19 23 views
1

我嘗試解決this problem 我知道,我可以這樣做Python的三角形的追求,裏面打印

for i in range(1,input()): 
    print int(str(i)*i) 

它的工作原理,但我不能使用字符串,所以我有主意,做 算術運算像

for i in range(1,input()): 
    sum+=10**i 
    print i*((1+sum)%10**i) 

for i=1 1*(1+10)%10, 

for i=2 2*((1+110)%100), 

for i=3 3*((1+1110)%1000) etc. 

但它不工作,有更多的日一個2行:(任何人都有想法如何解決這個問題?一般來說,我知道如何解決這個數學問題,但我不知道如何在Python中做到這一點(沒有使用字符串和寫不超過2行)

+2

好吧,我有解決方案。只是 - 打印i *((11111)%10 ** i) – Rarez

+0

這隻會在n <= 6時起作用。您需要執行'print i *((11111111)%10 ** i)'以覆蓋最多n = 9。下面的解決方案同樣適用。 –

+0

@Rarez謹慎解釋這是如何工作的? –

回答

7

在這裏有幫助的東西是「Repunit」的公式。從維基百科頁面中獲取第i個Repunit的等式,並用10代替b(基數爲10),我們得到等式(10**i - 1)/(10 - 1)(10**i - 1)/9。結果如下:1, 11, 111, 1111...。乘以我,我們達到預期的結果:

>>> for i in range(1,input()): 
... print i * (10**i - 1)/9 
5<Enter> 
1 
22 
333 
4444