菜鸟的博客

纵有疾风起,人生不言弃。

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

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 }
复制代码

 

posted on   hhmzd233  阅读(28)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示