利用python 完成 leetcode 166 分数到小数

该博客介绍了如何使用Python解决LeetCode上的166题,即根据分数的分子和分母转化为小数。当遇到循环小数时,会在括号内表示循环部分。文章通过举例、解释思路和展示代码来详细说明解题过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

示例 1:

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

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

输入: numerator = 2, denominator = 3
输出: “0.(6)”
思路
数组l储存结果,为了方便计算,
当numerator <denominator 时numerator =numerator *10
否则numerator=numerator %denominator
l.append(numerator //denominator )
用字典q储存每个对应numerator 除以 denominator 的结果q[numerator]=numerator //denominator
当当前numerator 已在字典中出现过时,表示已经有一段循环了,将这一段用括号括起来

代码

def fractionToDecimal(self, numerator, denominator):
        if(numerator<0 and denominator<0):numerator,denominator=-numerator,-denominator
        u=(numerator<0)^(denominator<0)
        a=abs(numerator)
        b=abs(denominator)
        a=a%b
        if(a==0):return str(numerator//denominator)
        s=str(abs(numerator)//b)+'.'#计算整数部分
        q={}
        l=[]
        while(a<b):
            a=a*10
            l.append(a)
            q[a]=a//b
        a=a%b*10
        while(a not in q and a!=0):#a in q时表示已经有一段循环了,当前位置是循环的结尾
            l.append(a)        
            q[a]=a//b
            a=a%b
            a=a*10
        for i in range(0,len(l)):
            if(a==l[i]):s=s+'('
            s=s+str(q[l[i]])
        if('(' in s ):s=s+')'
        if(u):s='-'+s
        return s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值