forked from phpduke/Algorithms-Notebook
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfraction class
More file actions
40 lines (40 loc) · 1010 Bytes
/
fraction class
File metadata and controls
40 lines (40 loc) · 1010 Bytes
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
struct NOS {
ll num,den;
NOS() {}
NOS(ll numn) : num(num) {den = 1;}
NOS(ll num,ll den) : num(num),den(den) {
ll G = __gcd(num, den);
num /= G;
den /= G;
}
NOS(const NOS &p) : num(p.num),den(p.den) {}
NOS operator + (const NOS &p) const {
ll num_=num*p.den+den*p.num,den_=den*p.den;
ll G=__gcd(num_,den_);
num_/=G; den_/=G;
return NOS(num_,den_);
}
NOS operator - (const NOS &p) const {
ll num_=num*p.den-den*p.num,den_=den*p.den;
ll G=__gcd(num_,den_);
num_/=G; den_/=G;
return NOS(num_,den_);
}
NOS operator * (const NOS &p) const {
ll a = num, b = den, c = p.num, d = p.den;
ll G1 = __gcd(a, d), G2 = __gcd(b, c);
a /= G1; d /= G1;
b /= G2; c /= G2;
a *= c;
b *= d;
ll G = __gcd(a, b); //extra
a /= G; b /= G; //extra
return NOS(a, b);
}
bool operator != (const NOS &p) const {
return (p.num != num or p.den != den);
}
bool operator == (const NOS &p) const {
return (p.num == num and p.den == den);
}
};