#include<cstdlib>
#include<cstdio>
#define LL long long
LL gcd(LL a, LL b)
{
return !b ? a : gcd(b, a%b);
}
struct Fraction//分数
{
LL up, down;//分子,分母
};
//分数的化简
Fraction reduction(Fraction result)
{
if (result.down < 0)//分母为负数,令分子和分母都变为相反数
{
result.up = -result.up;
result.down = -result.down;
}
if (result.up == 0)//如果分子为0
{
result.down = 1;//令分母为1
}
else//如果分子不为0,进行约分
{
LL d = gcd(abs(result.up), abs(result.down));//分子分母的最大公约数
result.up /= d;//约去最大公约数
result.down /= d;
}
return result;
}
//分数的四则运算
Fraction add(Fraction f1, Fraction f2)//分数f1加上分数f2
{
Fraction result;
result.up = f1.up*f2.down + f2.up*f1.down;//分数和的分子
result.down = f1.down*f2.down;//分数和的分母
return reduction(result);//返回结果分数,注意化简
}
Fraction minu(Fraction f1, Fraction f2)//分数f1减去分数f2
{
Fraction result;
result.up = f1.up*f2.down - f2.up*f1.down;//分数差的分子
result.down = f1.down*f2.down;//分数差的分母
return reduction(result);//返回结果分数,注意化简
}
Fraction add(Fraction f1, Fraction f2)//分数f1乘以分数f2
{
Fraction result;
result.up = f1.up*f2.up;//分数积的分子
result.down = f1.down*f2.down;//分数积的分母
return reduction(result);//返回结果分数,注意化简
}
Fraction add(Fraction f1, Fraction f2)//分数f1除以分数f2
{
Fraction result;
result.up = f1.up*f1.down;//分数商的分子
result.down = f1.down*f2.up;//分数商的分母
return reduction(result);//返回结果分数,注意化简
}
//分数的输出
void showResult(Fraction r)//输出分数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);
}
}
分数的表示和四则运算
最新推荐文章于 2023-03-22 22:16:47 发布