之前一直总是简单的想将分数化为小数进行计算,其实使用相应的结构进行分子分母的分开保存,可以有奇效;
分数的存储:
struct Fraction{
int up;
int down;
};
其中up代表分子,down代表分母;
对于分数,有基本的几个规则:
1.正负号挂在分子上;
2.当分数表示0的时候,分子为0,分母为1;
3.分子分母必须达到最简,也就是没有1以外的公约数;
当分数进行四则运算的时候,也是基于这三条的性质来进行化简;
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;
}
其中值得注意的是进行最大公约数计算的时候一定要注意注意分子可能为负,所以要进行绝对值的提前处理;
分数的四则运算:
在上述化简函数的基