您的位置:首页 > 其它

Fraction to Recurring Decimal

2016-03-29 12:04 288 查看
思路:1、对分子为0的可以提前返回

2、结果为正负的判断

3、数组越界(最小负数除以-1)

4、对于遇到小数的开始要加上“.”,有小数后可以扩大被除数,对于是否有重复的地方要判断其被除数是否重复了!!!

对于abs()函数切记,先把数转换为长整型,然后再用abs(),否则最小负数是转换不了正数的!!!

class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
string res;
if(numerator==0) return "0";
if((numerator<0)^(denominator<0))
res+="-";
long long n=numerator;
long long d=denominator;
n=abs(n);
d=abs(d);
unordered_map<int,int> rep;
bool isFract=false;
while(true)
{
if(n<d)
{
if(isFract==false)
{
if(res==""||res=="-")
res+="0.";
else
res+=".";
isFract=true;
}
n*=10;
}
int r=n-n/d*d;
if(r==0)
{
res+=to_string(n/d);
return res;
}
else
{
if(isFract==true)
{
if(rep.find(n)==rep.end())
{
res+=to_string(n/d);
rep
=res.size()-1;
}
else
{
int pos=rep
;
res=res.substr(0,pos)+"("+res.substr(pos)+")";
return res;
}
}
else
res+=to_string(n/d);
n=r;
}

}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: