2023.5.16
1 相信同学们对复数运算符重载已经相当熟悉啦,那今天那我们来看看分数又该如何处理呢?定义一个分数类FS,有私有成员分子fz,分母fm。另有公有成员函数FS operator + (const FS &f)对运算符“+”进行重载,实现两个分数相加。题目首先给出一个整型数n,紧跟着2n行输入,输入形如3z4m,代表分子为3,分母为4。其中分母不为0,输入时分母可以为负数,但输出时分母必须为正数。 2 要求对分数进行两两求和,并化简。(备注说明:分数为0时,表示成0z1m,如果结果为负数,那么分子取负数,分母为正数)
1 #include <iostream> 2 using namespace std; 3 void HJ(int &fz, int &fm) 4 { 5 int gy = 1; 6 while ((gy < fz) || (gy < fm)) 7 { 8 gy++; 9 if (((fz % gy) == 0) && ((fm % gy) == 0)) 10 { 11 fz /= gy; 12 fm /= gy; 13 } 14 } 15 16 } 17 class FS 18 { 19 friend void operator >>(istream& cin, FS& fs); 20 public: 21 FS operator+(FS& f) 22 { 23 if (this->fm < 0) 24 { 25 this->fm = -this->fm; 26 this->fz = -this->fz; 27 } 28 if (f.fm < 0) 29 { 30 f.fm = -f.fm; 31 f.fz = -f.fz; 32 } 33 if (this->fm == f.fm) 34 { 35 int fz = this->fz + f.fz; 36 int fm = this->fm; 37 HJ(fz,fm); 38 cout << fz << "z" << fm << "m" << endl; 39 } 40 else if (this->fz == 0 || f.fz == 0) 41 { 42 cout << "0z1m" << endl; 43 } 44 else 45 { 46 int fz = (this->fz * f.fm) + (this->fm * f.fz); 47 int fm = this->fm * f.fm; 48 HJ(fz,fm); 49 cout << fz << "z" << fm << "m" << endl; 50 } 51 return f; 52 } 53 private: 54 int fz; 55 int fm; 56 }; 57 void operator >>(istream& cin, FS& fs) 58 { 59 char Z; 60 char M; 61 cin >> fs.fz >> Z >> fs.fm >> M; 62 } 63 void test01() 64 { 65 int n = 0; 66 cin >> n; 67 FS fs[6]; 68 for (int i = 0; i < 2 * n; i++) 69 { 70 cin >> fs[i]; 71 } 72 for (int j = 0; j < 2 * n; j += 2) 73 { 74 fs[j] + fs[j + 1]; 75 } 76 } 77 int main() 78 { 79 test01(); 80 return 0; 81 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?