166. Fraction to Recurring Decimal

来源:互联网 发布:淘宝营销活动图片 编辑:程序博客网 时间:2024/05/17 19:19

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)".

思路:具体可参考http://blog.csdn.net/ljiabin/article/details/42025037
犯了一个错误,就是在abs的同时转long会溢出,因为如果abs里的数字是-INT_MIN的话直接abs会溢出,所以要先转成long,再abs。
class Solution {public:    string fractionToDecimal(int numerator, int denominator) {        if(numerator == 0) return "0";    if(denominator == 0) return "";        string res;    if(numerator <0 && denominator> 0) res ='-';    if(denominator<0 && numerator > 0) res = '-';        long  num = numerator; //这里不能直接long num = abs(numerator),如果numerator=-INT_MIN,abs后就已经溢出了    long  deno = denominator;    num = abs(num);          deno = abs(deno);        long ret = num/deno;    res += to_string(ret);        long long rem = (num%deno) * 10;    if(rem == 0) return res;        unordered_map<int, int> pos;    res +='.';        while(rem!=0)    {    if(pos.find(rem) != pos.end())    {    res.insert(pos[rem],1,'(');                   res+=')';      break;    }        pos[rem] = res.size();    ret = rem/deno;    res +=to_string(ret);    rem = (rem%deno) * 10;    }        return res;    }};


0 0