您的位置:首页 > 编程语言 > C语言/C++

LeetCode-Fraction to Recurring Decimal-解题报告

2015-07-03 19:48 525 查看
原题链接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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ leetcode