-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathP_166.java
More file actions
39 lines (36 loc) · 1.08 KB
/
Copy pathP_166.java
File metadata and controls
39 lines (36 loc) · 1.08 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
package leetcode.medium;
import java.util.HashMap;
import java.util.Map;
public class P_166 {
public String fractionToDecimal(int numerator, int denominator) {
if (numerator == 0) {
return "0";
}
final boolean sign = numerator > 0 == denominator > 0;
final long dividend = Math.abs(Long.valueOf(numerator));
final long divisor = Math.abs(Long.valueOf(denominator));
final StringBuilder sb = new StringBuilder();
if (!sign) {
sb.append('-');
}
sb.append(dividend / divisor);
long r = dividend % divisor;
if (r == 0) {
return sb.toString();
}
sb.append('.');
final Map<Long, Integer> map = new HashMap<>();
while (r > 0) {
if (map.containsKey(r)) {
sb.insert((int) map.get(r), '(');
sb.append(')');
break;
}
map.put(r, sb.length());
r *= 10;
sb.append(r / divisor);
r %= divisor;
}
return sb.toString();
}
}