#45331: python 的兩種作法


sam851015@gmail.com (多挖鼻孔有益身心健康)

學校 : 臺中市立惠文高級中學
編號 : 277705
來源 : [123.192.228.253]
最後登入時間 :
2025-03-08 14:21:48
b538. 分數運算-2 -- 分數四則 | From: [123.192.228.253] | 發表日期 : 2025-02-15 19:15

一種解是懶人解,直接 import fractions

輕鬆、簡單,不關注底層如何實現,隨便把數字塞進去給他就好,非常的 pythonic,這就是 python 的優勢。

上一題有人介紹了: 連結

如果你只是想隨便寫一題,能 AC 就好,那讀到這邊就可以,這是最簡單的方法。

 

但你可能會注意到一樣都是 python,大家的的秒數卻有明顯落差,有些人需要 30ms 以上,有些人在 20ms 以內就完成了,差在哪?

差在那些 20ms 以內的人應該是自己實現 fractions 了,因為 fractions 實際上還有很多功能,只是這題用不到,但實際執行時還是會檢查那些東西,如果要避免的話就得自己實現,只放自己需要的功能。

建議把各種功能都封裝起來,這樣寫起來才會輕鬆,看你是要用 def 還是用 class 都可以,不這樣做的話......你的程式碼會被 if 淹沒,那樣很可怕

 

你需要實現的功能有:

  • 約分,畢竟題目要求要化簡成最簡分數。
  • 加減乘除,這是四個函數,你要寫成一個也是可以......可能會有點囉嗦,反正我是分開寫的。
  • 判斷結果是否會變成整數,如果是整數,請別在分母那邊寫 0
  • 分數如果有負號,請把負號放在分子的位置;如果分子和分母都是負數,那請轉換成正數。

 

這邊我只挑約分的部份出來講,因為這部份可能是最難的(個人感受),但也可以很簡單

現在請回憶一下你是怎麼給分數約分的?

分子和分母有相同的公因數就一直除,直到沒辦法再除為止。

如果想不起來的話,可能還需要再加油喔(約分的影片教學連結點我)

 

這個概念轉化一下,其實就是讓分子和分母同除以他們兩數的最大公因數,這樣就可以了。

這就是為什麼這題會有 gcd 的標籤

如果你不想學怎麼算 gcd,或是懶得自己寫,直接 from math import gcd 就可以

 

剩下的都是簡單的東西

加減法很簡單,先通分再計算

乘法就分子乘分子、分母乘分母

除法反過來,交叉相乘,分子乘分母、分母乘分子

 

記得最後的結果一樣要化簡成最簡分數

 

參考答案: gist (自定義 class 的版本)

我寫很多註釋,如果你覺得很囉唆也可以自己刪掉

不會 class 的話就自己改寫成只有 def 的版本就可以

 

 
ZeroJudge Forum