-
分數的表示:
最簡潔的方法就是寫成假分數的形式,即無論分子比分母大或者小,都保留爲原數。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);//真分數
}
}