分数的四则运算
分數的四則運算指的是分數的加減乘除
目錄
- 分數的表示和化簡
- 分數的加法
- 分數的減法
- 分數的乘法
- 分數的除法
- 分數的輸出
分數的表示和化簡
分數的表示:
對于一個分數來說,最簡潔的寫法就是寫成假分數的形式,即無論分子比分母大或者小,都保留其原數。
因此可以使用一個結構體來存儲這種只有分子和分母的分數:
于是就可以定義Fraction類型的變量來表示分數,或者定義數組來表示一堆分數。
其中需要對這種表示制定三項規則:
- 使down為非負數。如果分數為負,那么令分子up為負即可。
- 如果該分數恰為0,那么規定其分子為0,分母為1。
- 分子和分母沒有除了1以外的公約數。
分數的化簡:
分數的化簡主要用來使Fraction變量滿足分數表示的三項規定,因此化簡步驟也分為以下三步:
- 如果分母down為負數,那么令分子up和分母down都變為相反數。
- 如果up為0,那么令分母為down為1
- 約分:求出分子絕對值與分母絕對值的最大公約數d,然后令分子分母同時除以d。
分數的加法
Fraction add(Fraction a,Fraction b) {Fraction result;result.up=a.up*b.down+b.up*a.down;//分數和的分子 result.down=a.down*b.down;//分數和的分母 return reduction(result); //返回和的結果,注意化簡 }分數的減法
Fraction minu(Fraction a,Fraction b) {Fraction result;result.up=a.up*b.down-b.up*a.down;result.down=a.down*b.down;return reduction(result); //返回的結果,注意化簡 }分數的乘法
Fraction multi(Fraction a,Fraction b) {Fraction result;result.up=a.up*b.up;result.down=a.down*b.down;return reduction(result); //返回的結果,注意化簡 }分數的除法
Fraction divide(Fraction a,Fraction b) {Fraction result;result.up=a.up*b.down;result.down=a.down*b.up;printf("%d %d",result.up,result.down);return reduction(result); }分數的輸出
分數的輸出根據題目的要求進行,但是大體上有以下幾個注意點:
- 輸出分數前,需要先對其進行化簡。
- 如果分數 r 的分母為down為1,說明該分數是整數,一般來說題目會要求直接輸出分子,而省略分母的輸出。
- 如果分數 r 的分子up的絕對值大于分母down, 說明該分數是假分數,此時應按帶分數的形式輸出,即整數部分為r.up/r.down,
分子部分為abs(r.up)%r.down, 分母部分為r.down。 - 以上均不滿足說明分數 r 是真分數,按原例輸出即可。
強調一點:由于分數的乘法和除法的過程中可能使分子或分母超過int型表示范圍,
因此一般情況下,分子和分母應當使用long long 存儲。
總結
- 上一篇: 跟素数相关的题
- 下一篇: 数学问题->分数的四则运算