给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。
如果小数部分为循环小数,则将循环的部分括在括号内。
示例 1:
输入: numerator = 1, denominator = 2 输出: "0.5"
示例 2:
输入: numerator = 2, denominator = 1 输出: "2"
示例 3:
输入: numerator = 2, denominator = 3 输出: "0.(6)"
思路:长除法
解答(C++):
class Solution { public: string fractionToDecimal(int numerator, int denominator) { string res; // 分母为0 if(denominator == 0) return res; // 转换分子分母的格式 long long num = static_cast<long long>(numerator); long long denom = static_cast<long long>(denominator); // 负号形式 if((num*denom) < 0) res+="-"; // 处理负号 num = abs(num); denom = abs(denom); // 处理整数部分 res += to_string(num/denom); // 处理小数部分 num %= denom; if(num) res += "."; // 利用hash表定位出现过的除数从而定位循环 unordered_map<long long,int> map; int index = 0; while(num && map.find(num) == map.end()){ map[num] = index++; num *= 10; res += to_string(num/denom); num %= denom; } // 出现循环小数 if(map.find(num) != map.end()){ res += "()"; int cur = res.size()-2; while(index-- > map[num]){ swap(res[cur],res[cur-1]); --cur; } } // 返回结果 return res; } };
原文:https://www.cnblogs.com/vczf/p/12867072.html