-
Notifications
You must be signed in to change notification settings - Fork 279
/
Copy path166 Fraction to Recurring Decimal.js
73 lines (56 loc) · 1.54 KB
/
166 Fraction to Recurring Decimal.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// Leetcode #166
// Language: Javascript
// Problem: https://leetcode.com/problems/fraction-to-recurring-decimal/
// Author: Chihung Yu
/**
* @param {number} numerator
* @param {number} denominator
* @return {string}
*/
// http://blog.csdn.net/ljiabin/article/details/42025037
var fractionToDecimal = function(numerator, denominator) {
if(numerator === null || denominator === null){
return "";
}
if(numerator === 0){
return "0";
}
if(denominator === 0){
return "";
}
var answer = "";
var isNegative = false;
if((numerator < 0) ^ (denominator < 0)){
isNegative = true;
}
var num = Math.abs(numerator);
var den = Math.abs(denominator);
var res = ~~(num / den);
answer += res;
var rem = (num % den) * 10;
if(rem === 0){
return fixAnswer(isNegative,answer);
}
var map = {}
answer += ".";
while(rem !== 0){
if(map[rem]){
var beg = answer.substring(0,map[rem]);
var end = answer.substring(map[rem]);
answer = beg + '(' + end +')';
return fixAnswer(isNegative,answer);
}
map[rem] = answer.length;
res = ~~(rem / den);
answer += res;
rem = rem%den*10;
}
return fixAnswer(isNegative,answer);
};
var fixAnswer = function(isNegative, answer){
answer = answer.replace(/-/g,'');
if(isNegative){
answer = '-' + answer;
}
return answer;
}