思路:
模拟除法的过程,用hash表记录每个点的起点位置,为了处理循环小数。
代码:
class Solution {
public:
typedef long long LL;
unordered_map<LL,int> hash;
string fractionToDecimal(int numerator, int denominator) {
LL x = numerator,y = denominator;
string res;
if(x % y == 0) return to_string(x / y);
if((x < 0) ^ (y < 0)) res += '-';
x = abs(x),y = abs(y);
res += to_string(x / y) + '.', x %= y;
while(x){
//记录每个数字的起点位置
hash[x] = res.size();
x *= 10;
res += to_string(x / y);
x %= y;
if(hash.count(x)){
return res.substr(0,hash[x]) + '(' + res.substr(hash[x]) + ')';
}
}
return res;
}
};
评论区