1066: C++:运算符重载1(分数的加法)

题目描述
设计一个分数类rationalNumber,该类中包括分子和分母两个成员数据,并具有下述功能:

(1)建立构造函数,它能防止分母为零(分母为0时,输出"denominator equal zero"),当分数不是最简形式时进行约分,并避免分母为负数。

(2)重载加法运算符。

输入
输入数据第一行为一个整数T,表示有T组数据。每组数据一行,包含四个整数,分别表示两个分数a,b的分子和分母:分子 分母 分子 分母。
输出
对于每一组数据,输出两个分数相加的结果,格式参照样例输出。
样例输入 Copy
4
2 -4 1 4
2 -4 1 -2
2 -4 1 2
2 0 4 6
样例输出 Copy
-1/2+1/4=-1/4
-1/2-1/2=-1
-1/2+1/2=0
denominator equal zero

# include <iostream>
using namespace std;

class rationalNumber
{
public:
	bool FzMoreThanZero()
	{
		return fz >= 0;
	}

	bool FmEqZero()
	{
		return fm == 0;
	}

	rationalNumber(int p1, int p2)//构造函数
	{
		fz = p1;
		fm = p2;

		if (fm == 0)//分母不为零
		{
			cout << "denominator equal zero" << endl;
			return;
		}

		for (int i = abs(p1); i > 1; i--)//约分
		{
			if (fz % i == 0 && fm % i == 0)
			{
				fz = fz / i;
				fm = fm / i;
			}
		}

		if (fm < 0)
		{
			fm = -fm;
			fz = -fz;
		}
	}

	void show()
	{
		if (fm == 1 || fz == 0)
			cout << fz;
		else
			cout << fz << "/" << fm;
	}

	rationalNumber operator+(rationalNumber& b)//运算符重载
	{
		int fz1 = fz * b.fm + fm * b.fz;
		int fm1 = fm * b.fm;
		return rationalNumber(fz1, fm1);
	}

private:
	int fz;
	int fm;
};

int main()
{
	int T;
	int a, b, c, d;
	cin >> T;

	while (T-- > 0)
	{
		cin >> a >> b >> c >> d;
		rationalNumber r1(a, b);
		rationalNumber r2(c, d);

		if (r1.FmEqZero() || r2.FmEqZero())
		{
			continue;
		}

		rationalNumber r3 = r1 + r2;

		r1.show();
		if (r2.FzMoreThanZero())
			cout << "+";
		r2.show();
		cout << "=";
		r3.show();
		cout << endl;
	}

	return 0;
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值