LeetCode-Fraction to Recurring Decimal-解题报告

来源:互联网 发布:常熟市东张镇淘宝地址 编辑:程序博客网 时间:2024/06/05 11:07

原题链接https://leetcode.com/problems/fraction-to-recurring-decimal/

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)".
模拟除法的过程,需要记录每次余数出现的位置。如果余数重复出现则有循环,然后再对应的位置插上括号。

每次都会碰到-2147483648,abs之后超出了int的最大值。。。

上次贴的代码有问题 。

class Solution {public:    string fractionToDecimal(int numerator, int denominator) {bool sign = true;long long num = numerator, den = denominator, integer;if (num * den < 0)sign = false;num = abs(num);den = abs(den);integer = num / den;string Decimal = "";unordered_map<int, int>vis;num = num % den;vis[num] = Decimal.length() + 1;while (num){num *= 10;long long quotient = num / den;num = num % den;Decimal += (char)('0' + quotient);if (vis[num] != 0){Decimal.insert(vis[num] - 1, 1, '(');Decimal.push_back(')');break;}vis[num] = Decimal.length() + 1;}stringstream ss("");ss << integer;if (Decimal != "")Decimal = "." + Decimal;if (sign)return ss.str() +  Decimal;else return "-" + ss.str() + Decimal;}};




0 0