程式語言 - LeetCode - C++ - 166. Fraction to Recurring Decimal



題目:


解答:

class Solution {
public:
    string fractionToDecimal(int numerator, int denominator) {
        if (numerator == 0) {
            return "0";
        }

        string ans;

        if (numerator < 0 ^ denominator < 0) {
            ans += "-";
        }

        long n = labs(numerator);
        long d = labs(denominator);
        ans += to_string(n / d);

        long rem = n % d;
        if (rem == 0) {
            return ans;
        }

        ans += ".";
        unordered_map<long, int> q;
        while (rem) {
            if (q.count(rem)) {
                ans.insert(q[rem], "(");
                ans += ")";
                break;
            }

            q[rem] = ans.size();
            rem *= 10;
            ans += to_string(rem / d);
            rem %= d;
        }

        return ans;
    }
};