1. 题目
给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。
如果小数部分为循环小数,则将循环的部分括在括号内。
示例 1:
输入: numerator = 1, denominator = 2
输出: "0.5"示例 2:
输入: numerator = 2, denominator = 1
输出: "2"示例 3:
输入: numerator = 2, denominator = 3
输出: "0.(6)"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fraction-to-recurring-decimal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
class Solution {
public:string fractionToDecimal(int numerator, int denominator) {if(denominator == 0)return "";if(numerator == 0)return "0";string ans;long num = numerator, denom = denominator;if((num>0)^(denom>0))//一正一负ans.push_back('-');num = abs(num);denom = abs(denom);//都转换为整数//处理整数部分ans.append(to_string(num/denom));//处理小数部分num %= denom;if(num == 0)return ans;ans.push_back('.');int idx = ans.size()-1;//小数点的下标unordered_map<int,int> m;//记录循环出现的小数while(num && m.count(num)==0)//余数不为0,且没有出现过{m[num] = ++idx;//记录数字的下标num *= 10;//余数扩大10倍ans.append(to_string(num/denom));num %= denom;}if(m.count(num) == 1){ans.insert(m[num],"(");ans.push_back(')');}return ans;}
};