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)
{
string ans = "";
if(numerator == 0)
return "0";
if(denominator == 0)
return "";
if((numerator < 0) ^ (denominator < 0))
ans += "-";
long long int numerat = abs(numerator);
long long int denominat = abs(denominator);
//整数部分
long long int tmp1 = abs(numerat / denominat);
char c[20];
sprintf(c, "%lld", tmp1);
ans += string(c);
long long int yu = numerat % denominat;
if(yu == 0)
return ans;
ans += ".";
//小数部分
map<long long int, int> m;
while(yu)
{
if(m.find(yu) != m.end())
{
int index = m[yu];
string tmp1 = ans.substr(0, index);
string tmp2 = ans.substr(index, ans.length()-index);
ans = tmp1 + "(" + tmp2 + ")";
return ans;
}
m[yu] = ans.length();
yu *= 10;
long long int tmp = fabs(yu / denominat);
sprintf(c, "%lld", tmp);
ans += string(c);
yu %= denominator;
}
return ans;
}
};
class Solution(object):
def fractionToDecimal(self, numerator, denominator):
"""
:type numerator: int
:type denominator: int
:rtype: str
"""
if numerator == 0:
return "0"
if denominator == 0:
return ""
ans = ''
if (numerator < 0) ^ (denominator < 0):
ans += '-'
n = abs(numerator)
d = abs(denominator)
tmp1 = abs(n / d)
ans += str(tmp1)
yu = n % d
if yu == 0:
return ans
ans += "."
dicts = {}
while yu:
if dicts.has_key(yu):
tmp1 = ans[0 : dicts[yu]]
tmp2 = ans[dicts[yu] : ]
ans = tmp1 + '(' + tmp2 + ')'
return ans
dicts[yu] = len(ans)
yu *= 10;
tmp = yu / d
ans += str(tmp)
yu %= d
return ans