Skip to content

Commit f6f50d0

Browse files
committed
Updated fraction to recurring decimal
1 parent 7afd943 commit f6f50d0

File tree

1 file changed

+20
-20
lines changed

1 file changed

+20
-20
lines changed

Medium/FractionToRecurringDeci.java

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818
class FractionToRecurringDeci {
1919

2020
public static void main(String[] args) {
21-
// System.out.println(fractionToDecimal(1, 2));
22-
// System.out.println(fractionToDecimal(2, 1));
23-
// System.out.println(fractionToDecimal(2, 3));
24-
System.out.println(fractionToDecimal(Integer.MAX_VALUE, Integer.MIN_VALUE));
21+
FractionToRecurringDeci f = new FractionToRecurringDeci();
22+
// System.out.println(f.fractionToDecimal(1, 2));
23+
// System.out.println(f.fractionToDecimal(2, 1));
24+
// System.out.println(f.fractionToDecimal(2, 3));
25+
System.out.println(f.fractionToDecimal(Integer.MAX_VALUE, Integer.MIN_VALUE));
2526
}
2627

2728
/**
@@ -32,34 +33,33 @@ public static void main(String[] args) {
3233
* After dot = remainder * 10 / denominator
3334
* if already showed up, insert parentheses
3435
*/
35-
public static String fractionToDecimal(int numerator, int denominator) {
36+
public String fractionToDecimal(int numerator, int denominator) {
3637
if (denominator == 0) return "";
3738
if (numerator == 0) return "0";
3839

3940
StringBuilder res = new StringBuilder();
40-
Long n = new Long(numerator);
41+
Long n = new Long(numerator); // convert to long
4142
Long d = new Long(denominator);
42-
if (n * d < 0) res.append("-");
43+
if ((n < 0 && d > 0) || (n > 0 && d < 0)) res.append("-"); // negative
4344

44-
n = Math.abs(n);
45+
n = Math.abs(n); // to abstract value
4546
d = Math.abs(d);
46-
res.append(n / d);
47-
if (n % d == 0) return res.toString();
47+
res.append(n / d); // before dot
48+
if (n % d == 0) return res.toString(); // no fraction
4849

49-
res.append(".");
50-
// use map to remember the index of same remainder
51-
Map<Long, Integer> map = new HashMap<Long, Integer>();
52-
Long r = n % d;
50+
res.append("."); // add dot
51+
HashMap<Long, Integer> map = new HashMap<Long, Integer>();
52+
Long r = n % d; // get first remainder
5353
while (r > 0) {
54-
if (map.containsKey(r)) {
55-
res.insert(map.get(r), "(");
56-
res.append(")");
54+
if (map.containsKey(r)) { // remainder appeared before
55+
res.insert(map.get(r), "("); // insert an open paren
56+
res.append(")"); // append a close paren
5757
break;
5858
}
59-
map.put(r, res.length());
60-
r *= 10; // remainder * 10 / denominator
59+
map.put(r, res.length()); // save remainder and the length
60+
r *= 10; // simulate long division
6161
res.append(r / d);
62-
r %= d; // get remainder
62+
r %= d; // get next remainder
6363
}
6464
return res.toString();
6565
}

0 commit comments

Comments
 (0)