给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。
如果小数部分为循环小数,则将循环的部分括在括号内。
示例 1:
输入: numerator = 1, denominator = 2
输出: "0.5"
示例 2:
输入: numerator = 2, denominator = 1
输出: "2"
示例 3:
输入: numerator = 2, denominator = 3
输出: "0.(6)"
使用divmod获取商和余数. 然后通过余数求小数.
不断将余数*10, 再次调用divmod, 则算出来的商就是小数.
如果重复出现小数, 则说明为循环.
python divmod() 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。
class Solution:
def fractionToDecimal(self, numerator: int, denominator: int) -> str:
# 求整数
n, remainder = divmod(abs(numerator), abs(denominator))
sign = '-' if numerator*denominator < 0 else ''
fraction = [sign+str(n)]
if remainder == 0:
return ''.join(fraction)
fraction.append('.')
dic = {}
# 求小数
while remainder != 0:
# 出现过, 则说明进入循环.
if remainder in dic:
fraction.insert(dic[remainder], '(')
fraction.append(')')
break
dic[remainder] = len(fraction)
n, remainder = divmod(remainder*10, abs(denominator))
fraction.append(str(n))
return ''.join(fraction)
作者:leichaojian
链接:https://leetcode-cn.com/circle/article/zCRUOo/