分数到小数
给定两个整数,分别表示分数的分子 numerator
和分母 denominator
,以 字符串形式返回小数 。
如果小数部分为循环小数,则将循环的部分括在括号内。
如果存在多个答案,只需返回 任意一个 。
对于所有给定的输入,保证 答案字符串的长度小于 104
。
示例 1:
输入:numerator = 1, denominator = 2 输出:"0.5"
示例 2:
输入:numerator = 2, denominator = 1 输出:"2"
示例 3:
输入:numerator = 2, denominator = 3 输出:"0.(6)"
示例 4:
输入:numerator = 4, denominator = 333 输出:"0.(012)"
示例 5:
输入:numerator = 1, denominator = 5 输出:"0.2"
提示:
-2^31 <= numerator, denominator <= 2^31 - 1
denominator != 0
class Solution(object):
def fractionToDecimal(self, numerator, denominator):
if numerator < 0 and denominator < 0:
numerator, denominator = -numerator, -denominator
u = (numerator < 0) ^ (denominator < 0)
numerator = abs(numerator)
denominator = abs(denominator)
numerator = numerator % denominator
if numerator == 0:
return str(numerator // denominator)
s = str(abs(numerator) // denominator) + "."
q = {}
l = []
while numerator < denominator:
numerator = numerator * 10
l.append(numerator)
q[numerator] = numerator // denominator
numerator = numerator % denominator * 10
while numerator not in q and numerator != 0:
l.append(numerator)
q[numerator] = numerator // denominator
numerator = numerator % denominator
numerator = numerator * 10
for i in range(0, len(l)):
if numerator == l[i]:
s = s + "("
s = s + str(q[l[i]])
if "(" in s:
s = s + ")"
if u:
s = "-" + s
return s