Equal Rational Numbers LeetCode solution in C++

1
class Solution {
2
public:
3
double toDouble(string s) {
4
// Strings for each integral, fractional, and repeating part
5
string in = "", fn = "", rn = "";
6

7
int i = 0;
8

9
// Integral
10
while (i < s.size() && s[i] != '.') {
11
in += s[i];
12
i++;
13
}
14
// Fractional
15
i++;
16
while (i < s.size() && s[i] != '(') {
17
fn += s[i];
18
i++;
19
}
20
// Repeating
21
i++;
22
while (i < s.size() && s[i] != ')') {
23
rn += s[i];
24
i++;
25
}
26

27
// Number
28
double a = 0;
29

30
// Adding integral part
31
if (!in.empty()) a = stoi(in);
32

33
i = 0;
34

35
// Adding fractional part
36
while (i < fn.size()) {
37
a = a * 10 + fn[i] - '0';
38
i++;
39
}
40

41
// Adding repeating part
42
if (i < 8) {
43
// If repeatig part isn't there then just add 0s
44
if (rn.size() == 0) {
45
while (i <= 8) {
46
a *= 10;
47
i++;
48
}
49
}
50

51
else {
52
int j = 0;
53
while (i <= 8) {
54
a = a * 10 + rn[j % rn.size()] - '0';
55
j++;
56
i++;
57
}
58
}
59
}
60
// Return number/10^8
61
return a / 10e8;
62
}
63

64
bool isRationalEqual(string s, string t) {
65
// Find absolute differance till 8 digits after decimal and compar if its
66
// lesser
67
double ans = abs(toDouble(s) - toDouble(t));
68
return ans < 0.000000002;
69
}
70
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0