首页 > 其他分享 >166. 分数到小数(中)

166. 分数到小数(中)

时间:2024-02-27 21:11:07浏览次数:22  
标签:分数 res denominator numerator 字符串 余数 166 小数

目录

题目

  • 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。
    如果小数部分为循环小数,则将循环的部分括在括号内。
    如果存在多个答案,只需返回 任意一个 。
    对于所有给定的输入,保证 答案字符串的长度小于 104 。

示例 1:

输入:numerator = 1, denominator = 2
输出:"0.5"

示例 2:

输入:numerator = 2, denominator = 1
输出:"2"

示例 3:

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

题解

class Solution:
    def fractionToDecimal(self, numerator: int, denominator: int) -> str:
        # s=''
        a=numerator/denominator
        s="%s" % a#把浮点型a转换成字符串s
        #rstrip是一个字符串方法,用于移除字符串末尾的指定字符。
        s=s.rstrip("0").rstrip(".") if "." in s else s#处理比如2.0移除末尾0和小数点
        return s 
        #如果字符串中出现了循环,把循环的部分用括号括起来
        i=s.find(".")+1
        j=i+1
        while j< len(s):
            if j!=i:
                j+=1
            else:
                i+=1
                j+=1
        s = s.split(".")[0] + "."  + "(" + decimal_part[i:j] + ")"  # 构建带括号的循环部分
        return s 
  • 循环小数的情况没有解决

正解

class Solution:
    def fractionToDecimal(self, numerator: int, denominator: int) -> str:
        if numerator == 0: return "0"#如果分子为0,直接返回"0"
        res = [] # 结果列表,用于存储转换后的字符串
        # 首先判断结果正负, 异或作用就是 两个数不同 为 True 即 1 ^ 0 = 1 或者 0 ^ 1 = 1
        if (numerator > 0) ^ (denominator > 0):
            res.append("-")
        numerator, denominator = abs(numerator), abs(denominator)# 取绝对值,符号是单独处理的
        # 判断到底有没有小数
        #divmod(a, b) 返回一个元组 (a // b, a % b),其中a // b表示a除以b的整数部(商),a % b 表示 a 除以b 的余数。
        a, b = divmod(numerator, denominator)#eg:10/3,a=3,b=1
        res.append(str(a))# 将整数部分转换为字符串并添加到结果列表中,res=3
        # 无小数
        if b == 0:# 如果余数为0,说明结果为整数,直接返回结果
            return "".join(res)
        res.append(".")# 添加小数点,res=3.
        # 处理余数
        # 把所有出现过的余数记录下来
        loc = {b: len(res)} # 用字典记录余数出现的位置。1:2
        while b:
            b *= 10  #将余数扩大10倍,用于计算下一位小数b=1*10=10
            a, b = divmod(b, denominator) #计算当前位的商和余数a=3,b=1
            res.append(str(a)) #将当前位的商转换为字符串并添加到结果列表res=3.3
            # 余数前面出现过,说明开始循环了,加括号
            if b in loc:#现在的b=1,出现在loc中
                res.insert(loc[b], "(")#插入左括号,res=3.(3
                res.append(")")#末尾加反括号res=3.(3)
                break
            # 在把该位置的记录下来
            loc[b] = len(res)# 记录当前余数的位置
        return "".join(res)# 将结果列表转换为字符串并返回

标签:分数,res,denominator,numerator,字符串,余数,166,小数
From: https://www.cnblogs.com/lushuang55/p/18036719

相关文章

  • 《程序是怎样跑起来的》第三章“计算机进行小数运算时出错的原因”
    当我们使用计算机进行小数运算时,可能会遇到一些意想不到的错误。这些错误并非计算机的缺陷,而是由于其内在的特性所导致的。深入了解这些原因,有助于我们更好地理解计算机运算的局限性和应对策略,从而在编程和数据处理时更加得心应手。计算机在进行小数运算时出错的原因包括二进......
  • 第三章 计算机进行小数运算
    用二进制数来表示整数和整数的方法有很大不同,例如:0次幂前面的位的位权按照1次幂、2次幂……的方式递增,0次幂以后的位的位权按照-1次幂、-2次幂……的方式递减(这一规律在十进制数和16进制数中也同样适用)。在了解了将二进制数表示的小数转化成10进制数的方法后,计算机运算出错的原因......
  • 分数阶微分 FOD(GL)
    分数阶微分方程讲义-华师大数院分数阶微分-清华大学出版社参考以上文件公式与代码,使用R代码编写,针对光谱数据,经对比alpha=1时与应用prospectr包函数计算结果一致fod<-function(spectrum,alpha){#initd<-dim(spectrum)FOD<-matrix(0,nrow=0,ncol=d[2])......
  • 计算机进行小数运算时出错的原因
    通过此章的学习我了解的计算机出错的几个重大原因,以及什么是浮点数,让我对计算机有了更加深刻的认知和理解,我也了解到如何在实际程序中确认和如何避免计算机出错计算机运算出错的原因计算机之所以会出现运算错误,是因为“有一些十进制数的小数无法转换成二进制数”。代码清单3-1......
  • Windows ® Installer. V 5.0.20348.1668 (msiexec命令 参数
    Windows®Installer.V5.0.20348.1668msiexec/Option<RequiredParameter>[OptionalParameter]安装选项 </package|/i><Product.msi> 安装或配置产品 /a<Product.msi> 管理安装-在网络上安装产品 /j<u|m><Product.msi>[/t<TransformList>......
  • vue3 ts用正则表达式校验两位小数和校验整数的方法
    <el-col:span="12"><el-form-itemlabel="贷款金额"prop="loanAmount"><el-input-numberv-model="props.loanAmount":min="0"@change="checkIntegerNumber('loanAmount')"controls......
  • 程序是怎样跑起来第三章小数运算出错原因
    大家可能会认为“万能的计算机是不会出现计算错误的”。但实际上,依然存在程序运行后无法得到正确数值的情况。其中,小数运算就是一个典型的例子。在本章中我们首先了解了将二进制表示的小数转换成十进制的方法,这样便于理解计算机运算出错的原因,计算机之所以会出现运算错误,是因为“......
  • 第三章 计算机在计算小数时会出错的原因
    我们习惯性认为计算机在计算是不会出错,可事实并非如此。本章节第1节举出了一个例子“将0.1累加100次的结果不是10”。C语言程序结果得出10.000002。但出现这种去看并不是计算机故障或者程序编写错误的原因。想了解为什么出现错误,就要做到计算机是如何处理小数的。第2节告诉我们如......
  • 《程序是怎样跑起来的》第三章:计算机进行小数运算时出错的原因
    在当今的数字时代,计算机已经深入到我们生活的方方面面。从简单的计算器到复杂的科学模拟,再到无所不在的智能手机,计算机已经成为了我们生活中不可或缺的一部分。然而,你是否曾经想过,这些看似神奇的机器,它们是如何处理那些看似微不足道的运算,比如小数的计算呢?在《程序是怎老¥细批坦元......
  • Codeforces 1661F Teleporters
    先考虑贪心,令\(f(x,k)\)为满足\(\sum\limits_{i=1}^ks_i=x,s_i\in\mathbb{N}_+\)的\(s\)的\(\sum\limits_{i=1}^ks_i^2\)的最小值。也就是题目中在两个固定的点中放\(k-1\)个点这两个点中的最小贡献。平均分肯定是最优的,可以通过\(x\bmodk\)的值\(O(......