-
Notifications
You must be signed in to change notification settings - Fork 0
/
FractionToRecurringDecimal.java
49 lines (45 loc) · 1.61 KB
/
FractionToRecurringDecimal.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
import java.util.HashMap;
public class FractionToRecurringDecimal{
public String fractionToDecimal(int numerator, int denominator) {
long numeratorL = (long) numerator;
long denominatorL = (long) denominator;
if(numeratorL % denominatorL == 0)
return String.valueOf(numeratorL/denominatorL);
boolean negative = false;
if(numeratorL < 0){
negative = !negative;
numeratorL = 0 - numeratorL;
}
if(denominatorL < 0){
negative = !negative;
denominatorL = 0 - denominatorL;
}
long integer = numeratorL / denominatorL;
long remainer = numeratorL - (integer * denominatorL);
StringBuilder sb = new StringBuilder();
if(negative)
sb.append('-');
sb.append(integer);
sb.append('.');
int nextIndex = sb.length();
HashMap<Long, Integer> m = new HashMap<Long, Integer>();
m.put(remainer, nextIndex);
while(remainer != 0){
integer = remainer * 10 / denominatorL;
remainer = remainer * 10 - denominatorL * integer;
sb.append(integer);
Integer repeat = m.get(remainer);
if(repeat != null){
sb.insert(repeat, "(");
sb.append(")");
break;
}
m.put(remainer, ++nextIndex);
}
return sb.toString();
}
public static void main(String[] argvs){
FractionToRecurringDecimal ftd = new FractionToRecurringDecimal();
System.out.println(ftd.fractionToDecimal(-1, -2147483648));
}
}