166. Fraction to Recurring Decimal

    xiaoxiao2021-03-25  77

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

    特别烦这种处理数字的题……需要各种考虑边界条件。

    对于这个题来说,首先要判断除数和被除数是否非0, 然后判断是否异号,这个题有一个陷阱test case是-2147483648,因为要对-2147483648进行取绝对值操作,取完绝对值之后会溢出,所以要考虑到把n和d存储为long型。

    自己写的渣代码

    class Solution { public: string fractionToDecimal(int numerator, int denominator) { if(numerator == 0 || denominator == 0) return "0"; int f; if((numerator < 0 && denominator < 0) || (numerator > 0 && denominator > 0)) f = 1; else f = 0; unordered_map<int, int> m; long n = numerator, d = denominator, t = 0; n = abs(n); d = abs(d); string res = ""; if(n >= d){ t = n / d; n = n % d; res += to_string(t); } else res += '0'; if(n != 0) res += '.'; int recur = res.size(); m[n] = recur++; while(n != 0){ t = n * 10 / d; n = (n * 10) % d; if(m.find(n) == m.end()) {m[n] = recur++; res += t + '0';} else{ string s1 = res.substr(0, m[n]); string s2 = res.substr(m[n], res.size()); char c = t + '0'; res = s1 + '(' + s2 + c +')'; break; } } return f ? res : '-'+res; } };

    转载请注明原文地址: https://ju.6miu.com/read-34295.html

    最新回复(0)