【问题】

xxxxxxxxxx22 1/ 分类页样式 began /2.category-list-link:hover{3 transform: scale(1.1);4 box-shadow: 10px 10px 15px 2px rgba(0,0,0,.12), 0 0 6px 0 rgba(104, 104, 105, 0.1);5 border-radius: 15px;6 padding: 6px 16px;7 margin-left: 0px;8 font-size: 16px;9 transition-duration: 0.15s;10 //display:flex;11}12a.category-list-link:before{13 top: 10px;14 width: 18px;15 height: 18px;16 content: “📚”;17 margin-right: 5px;18 font: normal normal normal 14px/1 FontAwesome;19 font-size: 15px;20 line-height: 18px;21}22/ 分类页样式 end /css

(1)输出结果是最简分数(可以是带分数);

(2)分母为1,只输出分子。

【输入形式】

提示“Input x: ”,输入第一个分数。如:1/6

提示“Input y: ”,输入第二个分数。如:2/9

【输出形式】

提示并输出+、-、*、/的结果,如

x+y=7/18

x-y=-1/18

x*y=1/27

x/y=3/4

【样例输入】

Input x: 1/6

Input y: 2/9

【样例输出】

x+y=7/18

x-y=-1/18

x*y=1/27

x/y=3/4

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include  <iostream>
#include <cmath>
using namespace std;
class CFraction
{
private:
int nume; // 分子
int deno; // 分母
public:
CFraction(int nu = 0, int de = 1) :nume(nu), deno(de) {}
void simplify();

//输入输出的重载
friend istream &operator>>(istream &in, CFraction &x);
friend ostream &operator<<(ostream &out, CFraction x);

friend CFraction operator+(const CFraction &c1, const CFraction &c2); //两个分数相加,结果要化简
friend CFraction operator-(const CFraction &c1, const CFraction &c2); //两个分数相减,结果要化简
friend CFraction operator*(const CFraction &c1, const CFraction &c2); //两个分数相乘,结果要化简
friend CFraction operator/(const CFraction &c1, const CFraction &c2); //两个分数相除,结果要化简

};

void CFraction::simplify()
{
int nume_ = abs(nume), deno_ = abs(deno); // 保存原分数

if (nume < 0 && deno < 0)
{
nume *= -1;
deno *= -1;
}
else if (nume > 0 && deno < 0)
{
nume *= -1;
deno *= -1;
}

while (deno_ % nume_ != 0)
{
int temp = deno_;
deno_ = nume_;
nume_ = temp % nume_;
}
nume /= nume_;
deno /= nume_;

/* 也可以这么写
while (nume_ != deno_)
{
if (nume_ > deno_)
nume_ -= deno_;
else
deno_ -= nume_;
}
nume /= nume_;
deno /= nume_;*/
}
istream &operator>>(istream &in, CFraction &x)
{
char temp;
in >> x.nume >> temp >> x.deno;
return in;
}
ostream &operator<<(ostream &out, CFraction x)
{
if (x.deno != 1)
out << x.nume << '/' << x.deno;
else
out << x.nume;
return out;
}
CFraction operator+(const CFraction &c1, const CFraction &c2)
{
CFraction temp(c1.nume * c2.deno + c2.nume * c1.deno, c1.deno * c2.deno);
temp.simplify();
return temp;
}
CFraction operator-(const CFraction &c1, const CFraction &c2)
{
CFraction temp(c1.nume * c2.deno - c2.nume * c1.deno, c1.deno * c2.deno);
temp.simplify();
return temp;
}
CFraction operator*(const CFraction &c1, const CFraction &c2)
{
CFraction temp(c1.nume * c2.nume, c1.deno * c2.deno);
temp.simplify();
return temp;
}
CFraction operator/(const CFraction &c1, const CFraction &c2)
{
CFraction temp(c1.nume * c2.deno, c1.deno * c2.nume);
temp.simplify();
return temp;
}

int main()
{
CFraction x, y, s;
cout << "Input x: ";
cin >> x;
cout << "Input y: ";
cin >> y;
s = x + y;
cout << "x+y=" << s << endl;
s = x - y;
cout << "x-y=" << s << endl;
s = x * y;
cout << "x*y=" << s << endl;
s = x / y;
cout << "x/y=" << s << endl;
return 0;
}