LeetCode 166. Fraction to Recurring Decimal

来源:互联网 发布:origin软件使用教程 编辑:程序博客网 时间:2024/06/08 03:08

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;}


0 0
原创粉丝点击