请定义一个分数类,拥有两个整数的私有数据成员,分别表示分子和分母(分母永远为正数,符号通过分子表示)。 重载运算符加号"+",实现两个分数的相加,所得结果必须是最简分数。
输入:
第一行的两个数 分别表示 第一个分数的分子和分母(分母不为0)。 第二行的两个数 分别表示 第二个分数的分子和分母。
输出:
第一个数表示分子,第二个数表示分母(若分数代表的是整数,则不输出分母)。
输入样例:
1 5
2 5
输出样例:
3 5
正确代码:
#include<iostream>
#include<math.h>
using namespace std;
class Fs{
int fz,fm;
public:
void display();
Fs(int x = 0, int y = 0);
Fs operator+(Fs &op2)
{
int max = (this->fm > op2.fm) ? this->fm : op2.fm;
do
{
if (max % this->fm == 0 && max % op2.fm == 0)
{
break;
}
else
++max;
} while (true);
Fs temp;
this->fz *= max / this->fm;
op2.fz *= max / op2.fm;
this->fz += op2.fz;
temp.fz=this->fz;
temp.fm=max;
max = 1;
for (int i = 1; i <= abs(this->fz); i++)
{
if (temp.fz % i == 0 && temp.fm%i == 0)
max = i;
}
temp.fm /= max;
temp.fz/= max;
return temp;
}
};
Fs::Fs(int x,int y){
fz = x;
fm = y;
}
void Fs::display(){
cout << fz;
if(fm!=1&&fz!=0)
cout << " " << fm;
}
int main(){
int a[4];
cin >> a[0] >> a[1] >> a[2] >> a[3];
Fs x1(a[0],a[1]), x2(a[2],a[3]),x3;
x3 = x1 + x2;
x3.display();
}