Python練習題 013:求解a+aa+aaa……


【Python練習題 013】 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加由鍵盤輸入。

這題倒也不難,實際上 a+aa+aaa+aa...a 可以轉化為 (a * 10**0) + (a * 10**1) + (a * 10**2)…… 進而轉化為 a * (10**0 + 10**1 + 10**2 ……),所以用兩個 for 循環就搞定了。

注意:第1個 for 循環,range()得從1開始計數,這樣子第2個 for 循環一開始才能至少循環一次(如果 i = 0,那么 range(i) 就循環不起來了。

代碼如下:

a = int(input('請輸入數字 a:'))
count = int(input('請輸入幾個數相加:'))

res = 0  #初始化最終求解
for i in range(1, count+1): #循環次數與輸入的值一樣,但從1開始循環
    t = 0  #臨時用的變量
    for j in range(i):
        t = t + 10**j  #先計算 10**0 + 10**1 + ... + 10**j
    res = res + (a*t)  #再計算 a * t
print(res)

輸出結果如下:

請輸入數字 a:5
請輸入幾個數相加:4
6170

 

【2016-10-17 更新】---------------------------------------------------------------

感謝 Mr很大的龍 的指教,提供了更簡潔、更妙的方法。先看代碼感受一下:

a=input('輸入數字>>>')
count=int(input('幾個數字相加>>>'))
ret=[]
for i in range(1,count+1):
    ret.append(int(a*i))
    print(ret[i-1])
print(sum(ret))

我研究了半天死活沒看懂,a*i 為啥就能這么簡單地解決問題!如果 a = 2,那 a*i 不就是 2*1, 2*2, 2*3, 2*4... 了嗎?后來才恍然大悟:input() 獲得的輸入是字符,不是數字!而用於字符的乘法表示重復,不是數值運算!!即是說,字符 a 乘 2 的結果是 aa,字符 '2' 乘 2 的結果是 '22'!之后運算前把 '22' 轉換為數字 22 就可以了。真是太妙了!

 

++++++++++++++++++++++++++++++++++++++

題目出處:編程語言入門經典100例【Python版】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM