-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFraction.java
104 lines (85 loc) · 3.19 KB
/
Fraction.java
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
package fraction;
public class Fraction {
private final static int ZERO = 0;
private final static int ONE = 1;
private int numerator;
private int denominator = ONE;
@Override
public String toString() {
if (denominator == Fraction.ZERO)
return "" + numerator;
Fraction f = this;
f = Fraction.abbreviate(f);
return f.numerator + "/" + f.denominator;
}
public Fraction(int numerator, int denominator) {
if (denominator == Fraction.ZERO)
throw new ArithmeticException("Cannot equal 0.");
else if (denominator < Fraction.ZERO) {
this.denominator = -denominator;
this.numerator = -numerator;
} else {
this.denominator = denominator;
this.numerator = numerator;
}
}
public Fraction(int numerator) {
this.numerator = numerator;
this.denominator = 1;
}
public Fraction add(Fraction b) {
return new Fraction(
this.numerator * b.denominator
+ b.numerator * this.denominator,
this.denominator * b.denominator
); }
public static Fraction _sub(Fraction a, Fraction b) {
return new Fraction(
a.numerator * b.denominator
- b.numerator * a.denominator,
b.denominator * a.denominator
);}
public Fraction sub(Fraction b) {
return new Fraction(
this.numerator * b.denominator
- b.numerator * this.denominator,
b.denominator * this.denominator
);}
public static Fraction _multiply(Fraction a, Fraction b) {
return new Fraction(
a.numerator * b.numerator,
a.denominator * b.denominator
);}
public Fraction multiply(Fraction a) {
return new Fraction(
a.numerator * this.numerator,
a.denominator * this.denominator
);}
public static Fraction _divide(Fraction a, Fraction b) {
return new Fraction(
a.numerator * b.denominator,
a.denominator * b.numerator
);
}
public Fraction divide(Fraction b) {
return new Fraction(
this.numerator * b.denominator,
this.denominator * b.numerator
);
}
public static Fraction abbreviate(Fraction abbreviatingFraction) {
int numerator = abbreviatingFraction.numerator;
int denominator = abbreviatingFraction.denominator;
int greater_number = Integer.max(numerator, denominator);
int smaller_number = Integer.min(numerator, denominator);
int previous_reminder = 1;
int reminder = 1;
// find the greatest common divisor
while (reminder != 0) {
previous_reminder = smaller_number;
reminder = greater_number % smaller_number;
greater_number = smaller_number;
smaller_number = reminder;
}return new Fraction(numerator / previous_reminder, denominator / previous_reminder);
};
}