leetcode 分数到小数 python

给定两个整数,分别表示分数的分子 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/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值