「这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战」
分数到小数
给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。
如果小数部分为循环小数,则将循环的部分括在括号内。
如果存在多个答案,只需返回 任意一个 。
对于所有给定的输入,保证 答案字符串的长度小于 104 。
示例 1:
-
输入:numerator = 1, denominator = 2
-
输出:"0.5"
-
示例 2:
-
输入:numerator = 2, denominator = 1
-
输出:"2"
-
示例 3:
-
输入:numerator = 2, denominator = 3
-
输出:"0.(6)"
-
示例 4:
-
输入:numerator = 4, denominator = 333
-
输出:"0.(012)"
-
示例 5:
-
输入:numerator = 1, denominator = 5
-
输出:"0.2"
提示:
-231 <= numerator, denominator <= 231 - 1 denominator != 0
相关标签
- 哈希表
- 数学
- 字符串
解题思路:
- 先判断特殊情况 numerator 是否为0 为0 则直接返回 ”0“
- 通过内置函数先计算 divmod
- 设置结果集:ans
- 通过异或判断
- 遍历判断 ans.append
- 最后进行组合"".join(ans)
class Solution:
def fractionToDecimal(self, numerator: int, denominator: int) -> str:
if numerator == 0:
return "0"
ans = []
a, remaind = divmod(numer, denomin)
ans.append(str(a))
if (numerator < 0) ^ (denominator < 0):
ans.append("-")
numer = abs(numerator)
denomin = abs(denominator)
if remaind == 0:
return "".join(res)
ans.append(".")
tmp = {}
while remaind != 0:
if remaind in tmp:
ans.insert(tmp[remaind], "(")
ans.append(")")
break
tmp[remaind] = len(res)
remaind *= 10
a, remaind = divmod(remaind, denomin)
ans.append(str(a))
return "".join(ans)