一種解是懶人解,直接 import fractions
輕鬆、簡單,不關注底層如何實現,隨便把數字塞進去給他就好,非常的 pythonic,這就是 python 的優勢。
上一題有人介紹了: 連結
如果你只是想隨便寫一題,能 AC 就好,那讀到這邊就可以,這是最簡單的方法。
但你可能會注意到一樣都是 python,大家的的秒數卻有明顯落差,有些人需要 30ms 以上,有些人在 20ms 以內就完成了,差在哪?
差在那些 20ms 以內的人應該是自己實現 fractions 了,因為 fractions 實際上還有很多功能,只是這題用不到,但實際執行時還是會檢查那些東西,如果要避免的話就得自己實現,只放自己需要的功能。
建議把各種功能都封裝起來,這樣寫起來才會輕鬆,看你是要用 def 還是用 class 都可以,不這樣做的話......你的程式碼會被 if 淹沒,那樣很可怕。
你需要實現的功能有:
這邊我只挑約分的部份出來講,因為這部份可能是最難的(個人感受),但也可以很簡單
現在請回憶一下你是怎麼給分數約分的?
分子和分母有相同的公因數就一直除,直到沒辦法再除為止。
如果想不起來的話,可能還需要再加油喔(約分的影片教學連結點我)
這個概念轉化一下,其實就是讓分子和分母同除以他們兩數的最大公因數,這樣就可以了。
這就是為什麼這題會有 gcd 的標籤
如果你不想學怎麼算 gcd,或是懶得自己寫,直接 from math import gcd
就可以
剩下的都是簡單的東西
加減法很簡單,先通分再計算
乘法就分子乘分子、分母乘分母
除法反過來,交叉相乘,分子乘分母、分母乘分子
記得最後的結果一樣要化簡成最簡分數
參考答案: gist (自定義 class 的版本)
我寫很多註釋,如果你覺得很囉唆也可以自己刪掉
不會 class 的話就自己改寫成只有 def 的版本就可以