zoukankan      html  css  js  c++  java
  • 边工作边刷题:70天一遍leetcode: day 6

    Fraction to Recurring Decimal

    要点:

    • 基本公式:当余数小于除数,那么X10然后继续,这个意思就是小数位的数值表示的是余数相对于除数在10中占几份。
    • 注意小数点左边是不用按位计算的,直接一个除法
    • 如何计算循环部分?因为循环部分只会出现在末尾,直观的想法是最后再把循环位补到字符串结果里。但是这个方法行不通,因为不知道从哪个位置

    注意点:

    • 符号:记录 => 取abs => 取反
    • 如何记录循环:如果remaining已经在map里了,说明之后的计算就是重复之前的
    class Solution(object):
        def fractionToDecimal(self, numerator, denominator):
            """
            :type numerator: int
            :type denominator: int
            :rtype: str
            """
            sign = 1
            if numerator<0:
                sign = -1
                numerator = -numerator
            
            if denominator<0:
                sign = -sign
                denominator = -denominator
            
            q = numerator/denominator
            r = numerator-q*denominator
            hmap = {}
            res = []
            if sign==-1 and (q!=0 or r!=0): res = ["-"]
            res.append(str(q))
            if r>0: res.append(".")
            while r>0:
                print r
                if r in hmap:
                    res.insert(hmap[r],"(")
                    res.append(")")
                    break
                else:
                    hmap[r]=len(res)
                    q = r*10/denominator
                    r = r*10-q*denominator
                    res.append(str(q))
            
            return ''.join(res)
            
    
    
  • 相关阅读:
    2021-4-20 日报博客
    2021-4-19 日报博客
    2021-4-17 周报博客
    java web
    java web
    java web
    java
    java
    周末总结8
    java web
  • 原文地址:https://www.cnblogs.com/absolute/p/5560346.html
Copyright © 2011-2022 走看看