166. Fraction to Recurring Decimal

来源:互联网 发布:52单片机stc 编辑:程序博客网 时间:2024/05/03 08:19
//0ms ac//边界实在是太恶心,取个巧直接用longlong来解决//第二种方法错在不能准确的标记循坏开始的位置,所以只好弃掉unordered_set,用unordered_mapclass Solution {public:    string my_atoi(int n)    {        if(n==-2147483648) return "2147483648";        string s;        int len=log(n+0.1)/log(10);        for(int i=pow(10,len);i>=1;i/=10)        {            s.push_back(n/i+'0');            n=n%i;        }        return s;    }    string fractionToDecimal(int numerator, int denominator) {        long long num=numerator,deo=denominator,temp,n,m;        bool plus_flag=true;        if((num<0&&deo>0)||(num>0&&deo<0))    plus_flag=false;           num=abs(num);        deo=abs(deo);        n=num/deo;        m=num%deo;        if(m==0)         {            if(!plus_flag) return '-'+my_atoi(n);            else return my_atoi(n);        }        unordered_map<int,int> hash;        queue<int> s;        int i=0;        while(m!=0&&hash.find(m)==hash.end())        {            temp=m*10/deo;            s.push(temp);            hash[m]=i++;            m=m*10%deo;                    }        i=hash[m];        string str;        if(!plus_flag) str+='-';        str+=my_atoi(n);        str+='.';        while(!s.empty())        {            if(m!=0&&i--==0)              {                str+='(';            }            str.push_back(s.front()+'0');            s.pop();        }        if(m!=0) str+=')';        return str;    }};
class Solution {public:    string my_atoi(int n)    {        if(n==-2147483648) return "-2147483648";        string s;        if(n<0)        {            s.push_back('-');            n=-n;        }        int len=log(n+0.1)/log(10);        for(int i=pow(10,len);i>=1;i/=10)        {            s.push_back(n/i+'0');            n=n%i;        }        return s;    }    string fractionToDecimal(int numerator, int denominator) {        //if(numerator==-2147483648&&denominator==1) return "-2147483648";        //if(numerator==-2147483648&&denominator==-1) return "-2147483648";        long long num=numerator,deo=denominator,temp,n,m;        bool plus_flag=true;        if((num<0&&deo>0)||(num>0&&deo<0))    plus_flag=false;           num=abs(num);        deo=abs(deo);        n=num/deo;        m=num%deo;        if(m==0) return my_atoi(n);        unordered_set<int> hash;        queue<int> s;        while(m!=0&&hash.find(m)==hash.end())        {            temp=m*10/deo;            s.push(temp);            hash.insert(m);            m=m*10%deo;                    }        temp=m*10/deo;        string str;        if(!plus_flag) str+='-';        str+=my_atoi(n);        str+='.';        bool flag=true;        while(!s.empty())        {            if(flag&&s.front()==temp&&m!=0)              {                str+='(';                flag=false;            }            str.push_back(s.front()+'0');            s.pop();        }        if(m!=0) str+=')';        return str;    }};
0 0