老卫带你学---leetcode刷题(166. 分数到小数)

文章描述了一个名为Solution的类,用于将给定的分数(整数)转换成带有循环小数表示的字符串形式,包括正负号和可能的括号标记。方法通过处理正负、整数部分、余数循环等不同情况进行转换。
摘要由CSDN通过智能技术生成

166. 分数到小数

问题

给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。

如果小数部分为循环小数,则将循环的部分括在括号内。

如果存在多个答案,只需返回 任意一个 。

对于所有给定的输入,保证 答案字符串的长度小于 104 。

示例 1:

输入:numerator = 1, denominator = 2
输出:“0.5”
示例 2:

输入:numerator = 2, denominator = 1
输出:“2”
示例 3:

输入:numerator = 4, denominator = 333
输出:“0.(012)”

提示:

-231 <= numerator, denominator <= 231 - 1
denominator != 0

解决

其实就是处理三种情况:

  • 正负号
  • 有小数情况
  • 余数循环情况(找到位置,插入括号)
class Solution:
    def fractionToDecimal(self, numerator: int, denominator: int) -> str:
        if numerator==0:return "0"
        res=[]

        # 首先判断结果正负, 异或作用就是 两个数不同 为 True 即 1 ^ 0 = 1 或者 0 ^ 1 = 1
        if (numerator>0)^(denominator>0):
            res.append("-")
        numerator,denominator=abs(numerator),abs(denominator)
        # 判读到底有没有小数
        a,b=divmod(numerator,denominator)
        res.append(str(a))
        # 无小数
        if b==0:
            return "".join(res)

        # 处理余数
        # 把所有出现过的余数记录下来
        res.append(".")
        dic={b:len(res)} #这里插的位置是为了后面insert括号时找到
        while b:
            b*=10
            a,b=divmod(b,denominator)
            res.append(str(a))
            # 余数前面出现过,说明开始循环了,加括号
            if b in dic:
                res.insert(dic[b],"(")
                res.append(")")
                break
            # 在把该位置的记录下来
            dic[b]=len(res)
        return "".join(res)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值