请定义一个分数类,拥有两个整数的私有数据成员,分别表示分子和分母(分母永远为正数,符号通过分子表示)。
重载运算符加号"+",实现两个分数的相加,所得结果必须是最简分数。
输入:
第一行的两个数 分别表示 第一个分数的分子和分母(分母不为0)。 第二行的两个数 分别表示 第二个分数的分子和分母。
输出:
第一个数表示分子,第二个数表示分母(若分数代表的是整数,则不输出分母)。
输入样例:
1 5
2 5
输出样例:
3 5
我的答案:
#include<iostream>
using namespace std;
class Fenshu
{
public:
Fenshu(int a,int b):fenzi(a),fenmu(b){
}
friend Fenshu operator+(Fenshu&,Fenshu&);
friend ostream& operator<<(ostream&,Fenshu&);
private:
int fenzi;
int fenmu;
};
Fenshu operator+(Fenshu& a,Fenshu& b)
{
if(a.fenmu==b.fenmu)
{
a.fenzi+=b.fenzi;
a.fenmu=a.fenmu;
}
else
{
a.fenzi=a.fenzi*b.fenmu+b.fenzi*a.fenmu;
a.fenmu=a.fenmu*b.fenmu;
}
return a;
}
ostream& operator<<(ostream& os,Fenshu& F)
{
int i=1;
int gong=1;
if(F.fenzi==0)
{
os<<0;
}
else{
if(F.fenzi<F.fenmu)
{
for(i=1;i<=F.fenzi;i++)
{
if(F.fenzi%i==0&&F.fenmu%i==0)
gong=i;
}
F.fenzi=F.fenzi/gong;
F.fenmu=F.fenmu/gong;
if(F.fenmu==1)
{
os<<F.fenzi;
}
else os<<F.fenzi<<" "<<F.fenmu;
}
else if(F.fenzi>F.fenmu)
{
for(i=1;i<=F.fenmu;i++)
{
if(F.fenzi%i==0&&F.fenmu%i==0)
gong=i;
}
F.fenzi=F.fenzi/gong;
F.fenmu=F.fenmu/gong;
if(F.fenmu==1)
{
os<<F.fenzi;
}
else os<<F.fenzi<<" "<<F.fenmu;
}
else
{
os<<1;
}
}
return os;
}
int main()
{
int a,b;
cin>>a>>b;
Fenshu F1(a,b);
cin>>a>>b;
Fenshu F2(a,b);
Fenshu F3=F1+F2;
cout<<F3<<endl;
return 0;
}
遇到的问题:
在pta中出错: