-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathinterviewbit-hashing-fraction.py
34 lines (32 loc) · 1.13 KB
/
interviewbit-hashing-fraction.py
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
class Solution:
# @param numerator : integer
# @param denominator : integer
# @return a string
def fractionToDecimal(self, numerator, denominator):
if not numerator:
return "0"
sign = ""
if numerator < 0 and denominator < 0:
numerator, denominator = abs(numerator), abs(denominator)
elif numerator < 0 or denominator < 0:
sign = "-"
numerator, denominator = abs(numerator), abs(denominator)
remainders = {}
div, mod = numerator / denominator, numerator % denominator
if mod == 0:
return sign + str(div)
else:
fraction = sign + str(div) + "."
pos = len(fraction)
remainders[mod] = pos
while mod != 0:
mod *= 10
pos += 1
div, mod = mod / denominator, mod % denominator
fraction += str(div)
if mod in remainders:
fraction = fraction[:remainders[mod]] + "(" + fraction[remainders[mod]:] + ")"
break
else:
remainders[mod] = pos
return fraction