166.分数到小数
题目描述
思路:高精度除法
每一位小数是通过*10再除余计算的。而循环小数可以通过判断被除数有没有出现过,出现的位置在哪来判断(哈希记录)。
class Solution:
def fractionToDecimal(self, numerator: int, denominator: int) -> str:
def hdiv(dividend, divisor, precision=0):
if (dividend > 0 and divisor > 0) or (dividend < 0 and divisor < 0):
flag = 1
else:
flag = -1
dividend = abs(dividend)
divisor = abs(divisor)
quotient = dividend // divisor
remainder = dividend % divisor
if remainder == 0:
return str(quotient * flag)
ans = [str(quotient), '.']
repeats = dict()
i = 0
while i < precision:
dividend = remainder * 10
quotient = dividend // divisor
remainder = dividend % divisor
if dividend in repeats:
ans.insert(repeats[dividend], '(')
ans.append(')')
break
ans.append(str(quotient))
repeats[dividend] = i + 2
if remainder == 0:
break
i += 1
if precision == 0:
ans.pop(1)
if flag == -1:
return '-' + ''.join(ans)
return ''.join(ans)
return hdiv(numerator, denominator, 10000)