您的位置:首页 > 其它

LeetCode 166. Fraction to Recurring Decimal

2016-06-13 04:18 375 查看
So, the best solution I have seen.
点击打开链接

Integer part is easy to handle. For the fraction part, we need to remember where the loop start. Thus, we need to remember the position to insert '(' and the remainder.

#include <string>
#include <unordered_map>
#include <iostream>
using namespace std;

string getDec(long remainder, long den) {
string res = "";
unordered_map<long, int> map;
int i = 0;
while((remainder != 0) && (map.find(remainder) == map.end())) {
map.insert(make_pair(remainder, i));
i++;
remainder = remainder * 10;
res = res + (to_string(remainder/den));
remainder = remainder % den;
}
if(remainder != 0) {
int pos = map[remainder];
res.insert(pos, 1, '('); // insert position, bytes, char
res = res + ")";
}
return res;
}

string fractionToDecimal(int numerator, int demoinator) {
long num = numerator;
long den = demoinator;

bool neg = num * den < 0;
num = abs(num);
den = abs(den);

string res = neg ? ("-" + to_string(num / den)) : to_string(num / den);
long remainder = num % den;

return (remainder == 0) ? res : (res + "." + getDec(remainder, den));
}

int main(void) {
cout << fractionToDecimal(4, 333) << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: