Python編程算法【三十】將真分數分解為埃及分數
【案例內容】
分子為1的分數稱為埃及分數?,F輸入一個真分數(分子比分母小的分數,叫做真分數),請將該分數分解為埃及分數。
如:
【解題思路】
假設分子用fz表示,分母用fm表示,將真分數分解成埃及分數,主要解題思路總結如下: 第一種情況:如果fm能整除fz,那么埃及分數就是1/(fm/fz);比如3/6,其埃及分數為1/2 第二種情況:如果fz為3,fm是偶數,那么總能分解出1/fm及1/(fm/2)的埃及分數;比如3/16,可分解出1/16及1/8這兩個埃及分數 其余情況:利用原真分數,求解出一個分母為(fm//fz+1),分子為1的埃及分數,其中"//"代表整除,可避免出現小數。接著將真分數減去該埃及分數后,將求得的差,再次通過上述三種情況進行判斷,直到分子為1時停止循環(huán)。
在分解埃及分數時,可把分解出來的埃及分數存入到列表中,最后用帶"+"的符號把它們循環(huán)輸出即可。
本題可借助Fraction模塊,它可接收兩個整型參數,分別作為分子、分母,如Fraction(8, 11),即可表示8/11;它還能接受字符串型的分數,如Fraction("8/11"),也表示8/11,此外通過.numerator的屬性,可拿到分子;.denominator的屬性,可拿到分母。對于傳入的兩個參數,若能約分,它還會先幫你約分,比如Fraction(8, 12),得到的分數會是2/3,真可謂相當的方便!
【Python代碼】


注意用循環(huán)反復分解出埃及分數,直到分子為1時停止循環(huán),此時列表里的埃及分數之和,就等于原來的真分數。再次提醒一下Fraction模塊的強大之處,除了能方便的使用分數外,用它來做加減乘除的四則運算,也是完全可以做到的。因此有了Fraction模塊,事半功倍!