分数的表示和四则运算

#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);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值