请定义一个分数类,拥有两个整数的私有数据成员,分别表示分子和分母(分母永远为正数,符号通过分子表示)。 重载运算符加号"+",实现两个分数的相加,所得结果必须是最简分数。
输入:
第一行的两个数 分别表示 第一个分数的分子和分母(分母不为0)。 第二行的两个数 分别表示 第二个分数的分子和分母。
输出:
第一个数表示分子,第二个数表示分母(若分数代表的是整数,则不输出分母)。
输入样例:
1 5
2 5
输出样例:
3 5
完整代码
#include<iostream>
using namespace std;
class score
{
int x, y;
public:
score(int x1 = 0, int y1 = 0)
{
x = x1;
y = y1;
}
friend score operator+(const score& s1, const score& s2); //使用友元函数有两个参数,方便代码实现
void set(int a, int b)
{
x = a;
y = b;
}
void show()
{
cout << x;
if (y == 1)
{
cout << " " << endl;
}
else
cout << " " << y;
}
};
score operator+(const score& s1, const score& s2)
{
score s3;
s3.y = s1.y * s2.y;
s3.x = s1.x * s2.y + s2.x * s1.y; //令s3=s1+s2;
for (int i = 2;i < max(s3.x, s3.y);i++)
{
if (s3.x % i == 0 && s3.y % i == 0) //判断是否是公约数
{
s3.y = s3.y / i;
s3.x = s3.x / i;
i = 2; //重新循环 找下一个约数
}
}
return s3;
}
int main()
{
int a,b,c,d;
cin >> a>> b>> c>>d;
score a1(a, b);
score b1(c, d); //也可以用set()函数 void set(int a, int b){x=a;y=b;}
//s1.set(a,b);
// s2.set(a,b);
int e = 0, f = 0;
score c1 = a1 + b1;
c1.show();
return 0;
}