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 = 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;
}
};
本文介绍了一种将任意两个整数表示的分数转换为字符串格式的方法,并针对重复的小数部分进行了特殊处理。通过使用C++实现的具体算法示例,展示了如何判断结果的正负性、分离整数和小数部分,以及如何检测并标记重复的小数序列。

被折叠的 条评论
为什么被折叠?



