Wanglihaoer 2022-04-13 19:27 采纳率: 100%
浏览 260
已结题

pta 运算符重载(c++)

请定义一个分数类,拥有两个整数的私有数据成员,分别表示分子和分母(分母永远为正数,符号通过分子表示)。
重载运算符加号"+",实现两个分数的相加,所得结果必须是最简分数。

输入:
第一行的两个数 分别表示 第一个分数的分子和分母(分母不为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中出错:

img

  • 写回答

4条回答 默认 最新

  • 关注

    是不是因为你最后多输出了换行符,另外如果输出是整数的话,分母不应该再输出了
    修改之后

     
    #include<iostream>
    using namespace std;
    int gcd(int a,int b){return b?gcd(b,a%b):a;}
    class Fenshu
    {
        public:
            Fenshu(int a,int b):fenzi(a),fenmu(b){
            }
            Fenshu operator+(Fenshu& F2)
            {
                Fenshu temp=*this;
               temp.fenmu=fenmu*F2.fenmu;
                temp.fenzi=fenmu*F2.fenzi+fenzi*F2.fenmu;
                int g=gcd(temp.fenmu,temp.fenzi);
                temp.fenmu/=g; temp.fenzi/=g;
                return temp;
            }
            friend ostream& operator<<(ostream&,Fenshu&);
        private:
            int fenzi;
            int fenmu;
            
    };
    ostream& operator<<(ostream& os,Fenshu& F)
    {
        int i=1;
        int gong=1;
        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.fenzi%F.fenmu!=0)
            os<<F.fenzi<<" "<<F.fenmu;
        else
         os<<F.fenzi;
        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;
        return 0;
    }
     
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月24日
  • 已采纳回答 4月16日
  • 修改了问题 4月14日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助