原题链接https://leetcode.com/problems/fraction-to-recurring-decimal/
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.
For example,
- Given numerator = 1, denominator = 2, return "0.5".
- Given numerator = 2, denominator = 1, return "2".
- Given numerator = 2, denominator = 3, return "0.(6)".
每次都会碰到-2147483648,abs之后超出了int的最大值。。。
上次贴的代码有问题 。
class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
bool sign = true;
long long num = numerator, den = denominator, integer;
if (num * den < 0)sign = false;
num = abs(num);
den = abs(den);
integer = num / den;
string Decimal = "";
unordered_map<int, int>vis;
num = num % den;
vis[num] = Decimal.length() + 1;
while (num)
{
num *= 10;
long long quotient = num / den;
num = num % den;
Decimal += (char)('0' + quotient);
if (vis[num] != 0)
{
Decimal.insert(vis[num] - 1, 1, '(');
Decimal.push_back(')');
break;
}
vis[num] = Decimal.length() + 1;
}
stringstream ss("");
ss << integer;
if (Decimal != "")Decimal = "." + Decimal;
if (sign)
return ss.str() + Decimal;
else
return "-" + ss.str() + Decimal;
}
};