一.问题描述:
请定义一个分数类,拥有两个整数的私有数据成员,分别表示分子和分母(分母永远为正数,符号通过分子表示)。
重载运算符加号"+",实现两个分数的相加,所得结果必须是最简分数。
输入:
第一行的两个数 分别表示 第一个分数的分子和分母(分母不为0)。 第二行的两个数 分别表示 第二个分数的分子和分母。
输出:
第一个数表示分子,第二个数表示分母(若分数代表的是整数,则不输出分母)。
二.代码实现:
#include <bits/stdc++.h> using namespace std; class number { int fz,fm; friend number operator+(number &n1,number &n2); public: number(int a=0,int b=1) { fz=a; fm=b; } friend int gcd(int a,int b); friend int min_gb(number &n1,number &n2); int show() { cout<<fz; if(fm!=1) cout<<" "<<fm; //这里要注意空格和fz一起输出,如果分母为1,不需要输出空格,所以空格不能和fz一起输出 } }; int gcd(int a,int b) { if(b==0) return a; else return gcd(b,a%b); } int min_gb(number &n1,number &n2) { return n1.fm*n2.fm/gcd(n1.fm,n2.fm); } number operator+(number &n1,number &n2) { number nn; int a=min_gb(n1,n2); nn.fm=a; nn.fz=(a/n1.fm)*n1.fz+(a/n2.fm)*n2.fz; int b=gcd(nn.fz,nn.fm); if(b!=1) { nn.fz=nn.fz/b; nn.fm=nn.fm/b; } return nn; } int main() { int a,b,c,d; cin>>a>>b>>c>>d; number num1(a,b); number num2(c,d); number num3; num3=num1+num2; num3.show(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)