a248: 新手訓練 ~ 陣列應用
這篇教學會示範 ZeroJudge 基礎題庫「a248: 新手訓練 ~ 陣列應用」的解題過程。
題目需求
題目會提供 a、b、c 三個數字,使用 a 除以 b 後,輸出小數點後有 c 位數的數字,例如「15724 19169 10」輸出「0.8202827481」、「10 5 3」輸出「2.000」。
題目連結:a248: 新手訓練 ~ 陣列應用
解答
由於程式裡「小數位數」有上限,超過上限會以 0 呈現,因此不能直接用數字相除來求得答案 ( 結果會發生錯誤 ),所以必須先將數字乘以「10^位數」,讓結果變成「整數」,將整數換成字串,使用拆分字串的方式求得最後的答案。
while True:
try:
a, b, c = map(int, input().split(' ')) # 將題目給予的字串拆分成 a、b、c 三個數字
rd = a*(10**c)//b # 乘以 10^位數 後除以 b 求整數
rs = str(rd) # 將整數轉成字串
if len(rs) < c: # 如果字串的長度不足位數
for i in range(c - len(rs)):
rs = '0' + rs # 將字串前方補 0
m = rs[(c*-1):] # 根據位數拆分字串 ( 小數點後段 )
n = rs[:(c*-1)] # 根據位數拆分字串 ( 小數點前段 )
if n == '': n = '0' # 如果前段為空字串,就補 0
print(f'{n}.{m}') # 加上小數點,印出結果
except:
break
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~