forked from indy256/codelibrary
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathFraction.java
More file actions
59 lines (49 loc) · 1.32 KB
/
Fraction.java
File metadata and controls
59 lines (49 loc) · 1.32 KB
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
package numeric;
public class Fraction implements Comparable<Fraction> {
public long a, b;
public Fraction(long a, long b) {
if (b < 0) {
a = -a;
b = -b;
}
long g = gcd(Math.abs(a), b);
if (g != 0) {
a /= g;
b /= g;
}
this.a = a;
this.b = b;
}
static long gcd(long a, long b) {
return b == 0 ? a : gcd(b, a % b);
}
public Fraction plus(Fraction o) {
return new Fraction(a * o.b + o.a * b, b * o.b);
}
public Fraction minus(Fraction o) {
return new Fraction(a * o.b - o.a * b, b * o.b);
}
public Fraction mul(Fraction o) {
return new Fraction(a * o.a, b * o.b);
}
public Fraction div(Fraction o) {
return new Fraction(a * o.b, b * o.a);
}
@Override
public int compareTo(Fraction o) {
return Long.compare(this.a * o.b, this.b * o.a);
}
@Override
public String toString() {
return a + "/" + b;
}
// Usage example
public static void main(String[] args) {
Fraction a = new Fraction(1, 2);
Fraction b = new Fraction(3, 5);
System.out.println(a.plus(b));
System.out.println(a.minus(b));
System.out.println(a.mul(b));
System.out.println(a.div(b));
}
}