## Monday, August 7, 2017

### [Leetcode] Fraction to Recurring Decimal, Solution

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)".

[Thoughts]

[Code]
``````1:    string fractionToDecimal(int num2, int den2) {
2:      if(num2 == 0) return "0";
3:      string result;
4:      if((num2>0) ^ (den2>0)) {
5:        result +='-';
6:      }
7:      long num = abs((long)num2);
8:      long den = abs((long)den2);
9:
10:      // process before point
11:      long div = num/den;
12:      result += to_string(div);
13:
14:      //add point
15:      if(num % den != 0) {
16:        result +='.';
17:      } else {
18:        return result;
19:      }
20:
21:      //process after point
22:
23:      map<int, int> rem_index;
24:      long remind= num%den;
25:      while(remind!=0) {
26:        long res = remind*10/den;
27:
28:        if(rem_index.find(remind) == rem_index.end()) {
29:          result += to_string(res);
30:          rem_index[remind] = result.size()-1;
31:        } else {
32:          result.insert(rem_index[remind], 1, '(');
33:          result+=")";
34:          break;
35:        }
36:        remind = remind * 10;
37:        remind = remind% den;
38:
39:      }
40:      return result;
41:    }
``````