分数的化简:
化简步骤如下,
1,如果分母down为负数,那么令分子up和分母down都变为相反数;
2,如果分子up为0,那么令分母为down为1;
3,约分规则:求出分子绝对值与分母绝对值的最大公约数d,然后令分子与分母同时除以d。
代码如下:
Fraction reduction(Fraction res){ if(res.down < 0) { res.up = -res.up; res.down = -res.down; } if(res.up == 0){ res.down = 1; }else{ int d = gcd(abs(res.up),abs(res.down)); res.up /= d; res.down /= d; } return res; } 分数运算法则: 1,分数加法代码如下:
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);} 2,分数减法代码如下:
Fraction minu(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);} 3,分数乘法代码如下:
Fraction multi(Fraction f1,Fraction f2){ Fraction res; res.up = f1.up * f2.up; //分数乘积的分子 res.down = f1.down * f2.down;//分数乘积的分母 return reduction(res);} 4,分数除法代码如下:
Fraction divide( Fraction f1,Fraction f2){ Fraction res; res.up = f1.up * f2.down; //分数商的分子 res.down = f1.down * f2.up; //分数商的分母 return reduction(res); } 分数的输出注意点:
1,输出分数前,需要先化简;
2,如果分数r的分母down为1,说明分数为整数,直接输出分子即可;
3,如果分数r的分子up的绝对值大于分母down说明该分数是假分数,此时应按带分数形式输出,即整数部分为r.up/r.down,分子为abs(r.up)%r.down;
4,以上均不满足时说明分数r是真分数,原样输出即可。
代码如下:
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); //真分数}