您的位置:首页 > 其它

[LeetCode] Fraction to Recurring Decimal

2015-08-03 06:44 295 查看
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)".

代码:

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

string result = "";

// is result is negative
if ((numerator < 0) ^ (denominator < 0)) {
result += "-";
}

// convert int to long
long num = numerator, den = denominator;
num = abs(num);
den = abs(den);

// quotient
long res = num / den;
result += to_string(res);

// if remainder is 0, return result
long remainder = (num % den) * 10;
if (remainder == 0)
return result;

// right-hand side of decimal point
map<long, int> map;
result += ".";
while (remainder != 0) {
// if digits repeat
if (map.find(remainder)!=map.end()) {
int beg = map[remainder];
string part1 = result.substr(0, beg);
string part2 = result.substr(beg, result.length());
result = part1 + "(" + part2 + ")";
return result;
}

// continue
map.insert( pair<long,int>( remainder, result.length()) );
res = remainder / den;
result += to_string(res);
remainder = (remainder % den) * 10;
}

return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: