Given two integers representing the numerator and denominator of a fraction, return the fraction in string format.
If the fractional part is repeating, enclose the repeating part in parentheses.
If multiple answers are possible, just return any of them.
Example 1:
Input: numerator = 1, denominator = 2 Output: "0.5"
Example 2:
Input: numerator = 2, denominator = 1 Output: "2"
Example 3:
Input: numerator = 2, denominator = 3 Output: "0.(6)"
1.首先考虑 INT_MIN / (-1) 溢出问题,使用long long 类型
2 如果可以整除,直接返回
3. 考虑正负号
4. 使用hash表记录 (余数x,对应商的位置),如果余数相同,则对应的商也相同,循环就找到了
代码如下:
class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
typedef long long LL;
LL x = numerator, y = denominator;
if(x % y == 0) return to_string(x/y);
string res;
if((x < 0) ^ (y < 0)) res +='-';
x = abs(x), y = abs(y);
res += to_string(x/y) + '.', x %= y;
unordered_map<LL,int> hash;
while(x)
{
hash[x] = res.length();
x *= 10;
res += to_string(x/y), x %= y;
if(hash.count(x))
{
res = res.substr(0,hash[x]) + '(' + res.substr(hash[x]) + ')';
break;
}
}
return res;
}
};