1. 程式人生 > >166 Fraction to Recurring Decimal 分數到小數

166 Fraction to Recurring Decimal 分數到小數

rip amp scrip ble https end problems desc mina

給定兩個整數,分別表示分數的分子和分母,返回字符串格式的小數。
如果小數部分為循環小數,則將重復部分括在括號內。
例如,
給出 分子 = 1, 分母 = 2,返回 "0.5".
給出 分子 = 2, 分母 = 1,返回 "2".
給出 分子 = 2, 分母 = 3,返回 "0.(6)".

詳見:https://leetcode.com/problems/fraction-to-recurring-decimal/description/

class Solution {
public:
    string fractionToDecimal(int numerator, int denominator) {
        int s1 = numerator >= 0 ? 1 : -1;
        int s2 = denominator >= 0 ? 1 : -1;
        long long num = abs( (long long)numerator );
        long long den = abs( (long long)denominator );
        long long out = num / den;
        long long rem = num % den;
        unordered_map<long long, int> m;
        string res = to_string(out);
        if (s1 * s2 == -1 && (out > 0 || rem > 0))
        {
            res = "-" + res;
        }
        if (rem == 0)
        {
            return res;
        }
        res += ".";
        string s = "";
        int pos = 0;
        while (rem != 0) 
        {
            if (m.find(rem) != m.end())
            {
                s.insert(m[rem], "(");
                s += ")";
                return res + s;
            }
            m[rem] = pos;
            s += to_string((rem * 10) / den);
            rem = (rem * 10) % den;
            ++pos;
        }
        return res + s;
    }
};

詳見:https://www.cnblogs.com/grandyang/p/4238577.html

166 Fraction to Recurring Decimal 分數到小數