Skip to content

Instantly share code, notes, and snippets.

@onemouth
Created December 16, 2017 09:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save onemouth/8661ba05b986425cf238948e9cf06a1f to your computer and use it in GitHub Desktop.
Save onemouth/8661ba05b986425cf238948e9cf06a1f to your computer and use it in GitHub Desktop.
Fraction to Recurring Decimal
class Solution(object):
def longDivision(self, digit, denominator):
return digit*10 / denominator, digit*10 % denominator
def getFracs(self, digit, denominator):
fracs = []
rem_location = dict()
rem = digit
rem_location[rem] = len(fracs)
while digit > 0:
digit, rem = self.longDivision(digit, denominator)
fracs.append(digit)
if rem in rem_location:
par_start = rem_location[rem]
par_end = len(fracs)
fracs.insert(par_start, '(')
fracs.insert(par_end+1, ')')
break
rem_location[rem] = len(fracs)
digit = rem
return fracs
def fractionToDecimal(self, numerator, denominator):
"""
:type numerator: int
:type denominator: int
:rtype: str
"""
sign = ""
if numerator * denominator < 0:
sign = "-"
if numerator < 0:
numerator = -numerator
if denominator < 0:
denominator = -denominator
digit = numerator/denominator
rem = numerator % denominator
if rem == 0:
return "%s%d" % (sign, digit)
fracs = self.getFracs(rem, denominator)
fracs_str = ""
for frac in fracs:
fracs_str = fracs_str + "%s" % frac
return "%s%d.%s" % (sign, digit, fracs_str)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment