其实本道题直接的思维就是:把整数和小数分开,然后对小数部分不停的除,直到出现重复循环的数字。然后把整数、小数点、括号、小数部分拼接起来就好。
所以最开始需要判断除数、被除数是否为负数,是的话加上“-”;紧接着处理整数部分,把余数乘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:] + ")"
版权声明:本文为qq_37836792原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。