您的位置:首页 > 其它

LeetCode之Fraction to Recurring Decimal

2015-09-01 11:23 295 查看
/*思路:
1.计算整数部分;这里主要注意,分子绝对值小于分母绝对值且分子分母异号时,要返回“-0”。
2.计算小数部分;思路:用一个hash表记住出现过的余数以及余数对应的位置,如果当前用于计算
小数的余数在hash表中存在,则应返回结果,注意添加循环小数的括号。
3.合并整数、小数部分,返回结果。
整体来说,思路相对简单,但是写代码时有很多细节需要注意。*/
class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
string s0 = interger(numerator, denominator);
string s1 = decimal(numerator, denominator);
if(s1.empty()) return s0;
else return s0 + "." + s1;
}

string interger(long long numerator, long long denominator){//计算整数部分
string res;
long long num = numerator / denominator;
stringstream s;
s << num;
s >> res;
if(res == "0" && numerator * denominator < 0) res.insert(0, "-");
return res;
}

string decimal(int numerator, int denominator){//计算小数部分
long long n = numerator, d = denominator;
if(n < 0) n = -n;
if(d < 0) d = -d;
if(n >= d) n %= d;
unordered_map<int, int> appeared;
string res;
int count(0);
while(n != 0){
if(appeared.find(n) != appeared.end()){//余数出现过
res.insert(appeared
, "(");
res += ")";
return res;
}
else{//余数未出现过
appeared
= count;
n *= 10;
int tmp = n/d;
n %= d;
res += ('0' + tmp);
}
++count;
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: