- 使用map记录小数是否重复,使用unordered_map能够实现快速查找。
- 注意输入的int型转换为long long型,防止溢出。
string fractionToDecimal(int numerator, int denominator) {
//使用map来确定小数循环起始位置
string res = "";
if(numerator == 0)
return "0";
if(denominator == 0)
return res;
int tmpflag1 = numerator > 0 ? 1 : -1;
int tmpflag2 = denominator > 0 ? 1 : -1;
if(tmpflag1 * tmpflag2 < 0)
res += '-';
long long num = abs((long long) numerator);
long long den = abs((long long) denominator);
long long interger = num / den;
res += to_string(interger);
long long remain = num % den;
if(remain == 0)
return res ;
res += '.';
unordered_map<int,int> ref;
int pos = 0;
string s = "";
while(remain){
if(ref.find(remain) != ref.end()) //出现重复(循环)
{
s.insert(ref[remain],"(");
s += ")";
return res + s;
}
ref[remain] = pos;
int tmp = (remain * 10) / den;
s += to_string(tmp);
remain = (remain * 10) % den;
pos++;
}
return res + s;
}