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,
分数转小数。
模拟小数除法,狂WA不止,还是不够细!
1. 考虑结果正负,
2. 全部转为正数,因为负数会不便于中间处理,
3.用map保存余数和商对应位置的关系,出现重复余数直接插入括号结束.
4. 用longlong,INT_MIN变成正值会炸
5. 我用stringstream进行数转string,看到有人这么做:
res += to_string(integral); 学到了
class Solution {
public:
string fractionToDecimal(int numerator1, int denominator1) {
long long numerator = numerator1>0 ? numerator1 : -(long long)numerator1;
long long denominator = denominator1>0 ? denominator1 : -(long long)denominator1;
string res;
stringstream s;
s << numerator / denominator;
s >> res;
if((long long)numerator1 * denominator1 < 0) res='-'+res;
numerator = numerator % denominator;
if(numerator)
{
res+=".";
unordered_map<int, int> mp;
while(numerator)
{
if(mp.find(numerator) != mp.end())
{
res.insert(mp[numerator], 1, '(');
res += ")";
break;
}
mp[numerator] = res.size();
numerator*=10;
int digit = numerator / denominator;
numerator%=denominator;
string add;
stringstream ss;
ss << digit;
ss >> add;
res += add;
}
}
return res;
}
};