关闭

Leetcode159: Fraction to Recurring Decimal

标签: leetcodealgorithm
137人阅读 评论(0) 收藏 举报
分类:

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

Solution:

1、用一个map来记录n除以d的过程中被除数的变化,以及当被除数为n时相应的商在返回结果string中的位置,方便以后添加(。

2、负数变正数的时候会越界,下面的例子2^31 = 2 147 483 648,int表示范围(-2147483648~2147483647),所以要用long long:

Input:-1, -2147483648

Output:"0.0000000000000000000000000000001"

Expected:"0.0000000004656612873077392578125"

class Solution {
public:
    string fractionToDecimal(int numerator, int denominator) {
        string res = "";  
        if (numerator == 0) return "0";  
        if (denominator == 0)return res;  
  
        long long n = numerator;  
        long long d = denominator;  
        if ((n < 0 && d > 0) || (n > 0 && d < 0))  
            res = "-";  
        if (n < 0) n = -n;  
        if (d < 0) d = -d;  
        res += to_string(n / d);  
        n = n%d;  
        if (n == 0) return res;  
        res += '.';  
  
        int pos = res.size();  
        map<long long, int> record;  
        while (n != 0) {  
            if (record.find(n) != record.end()) {  
                res.insert(res.begin() + record[n], '(');  
                res += ')';  
                return res;  
            }  
            record[n] = pos;  
            res += char(n * 10 / d + '0');  
            pos++;  
            n = (n * 10) % d;  
        }  
        return res;  
    }
};


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:67762次
    • 积分:2335
    • 等级:
    • 排名:第16996名
    • 原创:148篇
    • 转载:119篇
    • 译文:0篇
    • 评论:4条
    个人主页
    文章分类
    最新评论