1. 程式人生 > >埃及分數

埃及分數

\n rac symbol string num clas 步驟 可用 一個

真分數分解為埃及分數的思路可歸納如下:
(1) 分數的分子用a表示、分母用b表示,變量c用來存儲各個埃及分數的分母。

(2) 如果分母是分子的倍數,直接約簡成埃及分數。

此時,埃及分數的分母c=b/a;分子為1,即直接將變量a賦值為1。

(3) 否則分數中一定包含一個分母為(b/a)+1的埃及分數。

若分母不是分子倍數,則可以分解出一個分母為(b/a)+1的埃及分數,即變量c的值 為(b/a)+1。

(4) 如果分子是1,表明已經是埃及分數,不用再分解,結束。

因為若分數的分子a為1,說明此時的分數己經是埃及分數無須再分解,可結束循環。對於這種不受循環條件限制,當某一條件滿足時便可結束循環的情況,可用break語句實現。

  1. if (a==1)
  2. {
  3. printf("1/%ld\n", c);
  4. break; /*a為1標誌結束*/
  5. }

(5) 如果分子是3而且分母是偶數,直接分解成兩個埃及分數1/(b/2)和1/b,結束。因分母為偶數,所以變量b—定是2的倍數,對於分解出的分數1/(b/2)經過約分之後肯定能得到一個埃及分數。原分數分解為兩個埃及分數之後便可利用break語句結束循環。

  1. if(a==3 && b%2==0) /*若余數分子為3,分母為偶數,輸出最後兩個埃及分數*/
  2. {
  3. printf ("1/%ld + 1/%ld\n", b/2, b);
  4. break;
  5. }

(6) 從分數中減去這個分母為(b/a)+1的埃及分數,回到步驟(2)重復上述過程。

埃及分數