分數的四則運算

  • 分數的表示:

 最簡潔的方法就是寫成假分數的形式,即無論分子比分母大或者小,都保留爲原數。Fraction——分數

struct Fraction{  //分數
    int up,down;  //分子、分母
}

 

三項規則:

1 、使down爲非負數。如果分數爲負,那麼令分子up爲負即可

2 、如果該分數恰爲零,那麼規定分子爲0,分母爲1

3 、分子和分母除了1外沒有其他公約數

 

 

  • 分數的化簡:

化簡主要使分數滿足以上三項規則,分爲以下三步:

1 、如果分母down爲負數,那麼令分子up,分母down都變爲相反數

2 、如果分子up爲0,那麼令分母爲0

3 、約分:求分子絕對值和分母絕對值的最大公約數,分子和分母同時除以最大公約數、

Fraction reduction(Fraction result){

   if(result.down<0){

    result.up=-result.up;

    result.down=-result.down;

}

    if(result.up==0){

        result.down=1;

    }else{

        int d=gcd(abs(result.up),abs(result.down));//分子分母求最大公約數

        result.up/=d;

        result.down/=d;

    }

    return result; 

}

 

 

  • 分數的加法:

對於兩個分數f1和f2,其加法計算公式爲

              f1.up*f2.down+f2.up*f1.down

result= ——————————————

                    f1.down*f2.down

Fraction add(Fraction f1,Fraction f2){

    Fraction result;

    result.up=f1.up*f2.down+f2.up*f1.down;

    result.down=f2.down*f1.down;

    return reduction (result);  //注意化簡

}

 

 

  • 分數的減法:

對於兩個分數f1和f2,其減法計算公式爲

              f1.up*f2.down*-f2.up*f1.down

result= ——————————————

                    f1.down*f2.down


 

Fraction minu(Fraction f1,Fraction f2){

    Fraction result;

    result.up=f1.up*f2.down-f2.up*f1.down;

    result.down=f2.down*f1.down;

    return reduction (result);  //注意化簡

}

 

 

  • 分數的乘法:

對於兩個分數f1和f2,其乘法計算公式爲

                 f1.up*f2.up

result=————————

            f1.down*f2.down

Fraction multi(Fraction f1,Fraction f2){

    Fraction result;

    result.up=f1.up*f2.up;

    result.down=f2.down*f1.down;

    return reduction (result);  //注意化簡

}

 

 

  • 分數的除法:

對於兩個分數f1和f2,其除法計算公式爲

             f1.up*f2.down

result=———————             //除數不爲零才能運用此計算

             f1.down*f2.up

Fraction multi(Fraction f1,Fraction f2){

    Fraction result;

    result.up=f1.up*f2.down;

    result.down=f1.down*f2.up;

    return reduction (result);  //注意化簡

}

 

 

 

  • 分數的輸出:

要求:1 、輸出分數前要先化簡

          2 、如果分母down爲1,說明該分數爲整數,一般來說題目會要求直接輸出分子,而省略分母的輸出

          3 、如果分數的分子up的絕對值大於分母down(取絕對值是因爲可能爲負數)

          4 、以上均不滿足則爲真分數,按原樣輸出即可

 

void showResult(Fraction r){

    r=reduction(r);

    if(r.down==1)    printf("%lld",r.up);//是否爲整數

    else if(abs(r.up)>r.down){

        printf("%d %d/%d",r.up/r.down,abs(r.up)%r.down,r.down);//假分數

    }else {

        printf("%d/%d",r.up,r.down);//真分數

    }

}

 

 

 

發佈了85 篇原創文章 · 獲贊 54 · 訪問量 8567
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章