【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 就可以了。真是太妙了!
++++++++++++++++++++++++++++++++++++++