LeetCode166. 分数到小数

LeetCode166. 分数到小数_第1张图片
其实本道题直接的思维就是:把整数和小数分开,然后对小数部分不停的除,直到出现重复循环的数字。然后把整数、小数点、括号、小数部分拼接起来就好。
所以最开始需要判断除数、被除数是否为负数,是的话加上“-”;紧接着处理整数部分,把余数乘10并且存储起来,一方面方便下次再除,另一方面方便找出循环数。如果此时余数乘10 以后还是0,那么说明没有小数位,直接return整数就行。之后余数乘10以后整除被除数,出现的就是小数点以后小数位,这时候需要用pointStr存储起来,用于后面拼接。每次余数乘10以后都要重新判断是否已经出现过了,出现过了则说明是循环,退出循环。
当然退出循环后,需要知道是正常退出还是break,正常退出说明没有循环,break则说明有循环,则开始找循环出现的位置,最后拼接返回结果。

    if numerator * denominator < 0:#judge zheng fu
        a = "-" # add a "-"
        numerator = abs(numerator)
        denominator = abs(denominator)
    else:
        a = ""
    a += str(numerator // denominator)#整数
    numerator = numerator % denominator * 10
    resultStr = [numerator]
    pointStr = ''
    if numerator == 0:
        return a
    while numerator!= 0:
        pointStr += str(numerator // denominator)
        numerator = numerator % denominator * 10
        if numerator in resultStr:
            break
        else:
            resultStr.append(numerator)
    else:
        return a + "." + pointStr
    place = resultStr.index(numerator)
    return a + "." + pointStr[:place] + "(" + pointStr[place:] + ")"

你可能感兴趣的:(笔记,python,leetcode)