Skip to content

Commit 9e280f9

Browse files
Update Fraction.cpp
1 parent bb5c5e6 commit 9e280f9

File tree

1 file changed

+46
-31
lines changed

1 file changed

+46
-31
lines changed

数学/Fraction.cpp

Lines changed: 46 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,78 @@
11
struct Fraction {
22
ll numerator, denominator;
33

4-
Fraction(ll n = 0, ll d = 1) {
5-
ll g = gcd(n, d);
4+
Fraction (ll n = 0, ll d = 1) {
5+
ll g = gcd (n, d);
66
n /= g;
77
d /= g;
8-
if(d < 0)n *= -1;
9-
d = abs(d);
10-
if(d == 0)n = abs(n);
8+
if (d < 0)n *= -1;
9+
d = abs (d);
10+
if (d == 0)n = abs (n);
1111
numerator = n;
1212
denominator = d;
1313
}
1414

15-
Fraction operator+(const Fraction &o) const {
16-
return Fraction(numerator * o.denominator + denominator * o.numerator, denominator * o.denominator);
15+
Fraction operator+ (const Fraction &o) const {
16+
return Fraction (numerator * o.denominator + denominator * o.numerator, denominator * o.denominator);
1717
}
1818

19-
Fraction operator+(const ll &o) const {
20-
return *this + Fraction(o, 1);
19+
Fraction operator+ (const ll &o) const {
20+
return *this + Fraction (o, 1);
2121
}
2222

23-
Fraction operator-(const Fraction &o) const {
24-
return Fraction(numerator * o.denominator - denominator * o.numerator, denominator * o.denominator);
23+
Fraction operator- (const Fraction &o) const {
24+
return Fraction (numerator * o.denominator - denominator * o.numerator, denominator * o.denominator);
2525
}
2626

27-
Fraction operator*(const Fraction &o) const {
28-
return Fraction(numerator * o.numerator, denominator * o.denominator);
27+
Fraction operator* (const Fraction &o) const {
28+
return Fraction (numerator * o.numerator, denominator * o.denominator);
2929
}
3030

31-
Fraction operator/(const Fraction &o) const {
32-
return Fraction(numerator * o.denominator, denominator * o.numerator);
31+
Fraction operator/ (const Fraction &o) const {
32+
return Fraction (numerator * o.denominator, denominator * o.numerator);
3333
}
3434

35-
bool operator<(const Fraction &o) const {
35+
bool operator< (const Fraction &o) const {
3636
return numerator * o.denominator < o.numerator * denominator;
3737
}
3838

39-
bool operator==(const Fraction &o) const {
39+
bool operator== (const Fraction &o) const {
4040
return numerator * o.denominator == o.numerator * denominator;
4141
}
42+
43+
bool operator<= (const Fraction &o) const {
44+
return *this < o or *this == o;
45+
}
46+
47+
bool operator> (const Fraction &o) const {
48+
return !(*this <= o);
49+
}
50+
51+
bool operator>= (const Fraction &o) const {
52+
return !(*this < o);
53+
}
54+
55+
friend ostream &operator<< (ostream &out, const Fraction &f) {
56+
out<<f.numerator<<"/"<<f.denominator;
57+
return out;
58+
}
59+
60+
friend Fraction smallest_fraction_in_interval (Fraction a, Fraction b);
4261
};
4362

44-
ostream &operator<<(ostream &out, const Fraction &f) {
45-
out << f.numerator << " " << f.denominator;
46-
return out;
47-
}
48-
49-
Fraction smallest_fraction_in_interval(Fraction a, Fraction b) {
50-
if(b < a)swap(a, b);
51-
if(a.numerator >= a.denominator) {
63+
//满足 a/b < p/q < c/d 的分数 p/q,分母最小的是多少
64+
Fraction smallest_fraction_in_interval (Fraction a, Fraction b) {
65+
if (b < a)swap (a, b);
66+
if (a.numerator >= a.denominator) {
5267
ll d = a.numerator / a.denominator;
5368
a.numerator -= a.denominator * d;
5469
b.numerator -= b.denominator * d;
55-
return smallest_fraction_in_interval(a, b) + d;
70+
return smallest_fraction_in_interval (a, b) + d;
5671
}
57-
if(b.numerator > b.denominator)return Fraction(1, 1);
58-
swap(a.numerator, a.denominator);
59-
swap(b.numerator, b.denominator);
60-
auto ans = smallest_fraction_in_interval(b, a);
61-
swap(ans.numerator, ans.denominator);
72+
if (b.numerator > b.denominator)return Fraction (1, 1);
73+
swap (a.numerator, a.denominator);
74+
swap (b.numerator, b.denominator);
75+
auto ans = smallest_fraction_in_interval (b, a);
76+
swap (ans.numerator, ans.denominator);
6277
return ans;
6378
}

0 commit comments

Comments
 (0)