1.分数的表示
struct Fraction{
int up;//分子
int down;//分母
};
①分数的表示形式为假分数
②如果分数为负数,则让分子为负数,分母为正数
③如果分数恰为0,则让分子为0,分母为1
④分数要求最简(即分子和分母没有除了1以外的公约数)
2.分数的化简
Fraction reduction(Fraction res){
if(res.down<0){
res.up=-res.up;
res.down=-res.down;
}
if(res.up==0){ //如果分子为0,令分母为1
res.down=1;
}else{
int t=gcd(abs(res.up),abs(res.down));//最大公约数
res.up/=t;
res.down/=t;
}
return res;
}
3.分数的四则运算
①加法
Fraction add(Fraction f1,Fraction f2){
Fraction res;
res.up=f1.up*f2.down+f2.up*f1.down;
res.down=f1.down*f2.down;
return reduction(res);
}
②减法
Fraction sub(Fraction f1,Fraction f2){
Fraction res;
res.up=f1.up*f2.down-f2.up*f1.down;
res.down=f1.down*f2.down;
return reduction(res);
}
③乘法
Fraction multi(Fraction f1,Fraction f2){
Fraction res;
res.up=f1.up*f2.up;
res.down=f1.down*f2.down;
return reduction(res);
}
④除法 (需判断f2.up!=0)
Fraction div(Fraction f1,Fraction f2){
Fraction res;
res.up=f1.up*f2.down;
res.down=f1.down*f2.up;
return reduction(res);
}
4.分数的输出
void print(Fraction res){
res=reduction(res);
if(res.down==1){
printf("%d",res.up);
}else if(abs(res.up>res.down)){
printf("%d %d/%d",res.up/res.down,abs(res.up)%res.down,res.down);
}else{
printf("%d/%d",res.up,res.down);
}
}