• API
• FAQ
• Tools
• Archive
SHARE
TWEET # Untitled a guest Mar 23rd, 2019 153 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. class Solution {
2. public:
3.     int recursive_calculator (string& s, int& i, int& last_indx) {
4.         long num = 0;
5.         stack<int> num_stack;
6.         char prev_sign = '+'; // default sign
7.         int tmp_sum = 0;
8.
9.         for (; i < s.size(); i++) {
10.             if (s[i] == ' ' && i != last_indx) continue;
11.
12.             if (isdigit(s[i]))  {
13.                 num = num * 10 + (s[i] - '0');
14.             } else if ( s[i] == '(' ) {
15.                 i++;
16.                 num = recursive_calculator(s, i, last_indx);
17.             }
18.
19.             if ( s[i] == ')' ||  i == last_indx || !isdigit(s[i]) ) {
20.                 long num_pushed = 0;
21.
22.                 switch(prev_sign) {
23.                     case '+':
24.                         num_stack.push(num);
25.                         break;
26.                     case '-':
27.                         num_stack.push(-num);
28.                         break;
29.                     case '/':
30.                         num_pushed = ( num_stack.top() ) / num;
31.                         num_stack.pop();
32.                         num_stack.push(num_pushed);
33.                         break;
34.                     case '*':
35.                         num_pushed = ( num_stack.top() ) * num;
36.                         num_stack.pop();
37.                         num_stack.push(num_pushed);
38.                         break;
39.                     default:
40.                         break;
41.                 }
42.
43.                 num = 0;
44.
45.                 if (s[i] == ')') {
46.                     i++;
47.                     break;
48.                 }
49.
50.                 // prev sign may get assigned ' ' or ')'  but the switch case will take care
51.                 // all invalid prev sign will fall in the default;
52.                 if (i < last_indx) prev_sign = s[i];
53.             }
54.         }
55.
56.         while (!num_stack.empty()) {
57.             tmp_sum += num_stack.top();
58.             num_stack.pop();
59.         }
60.         return tmp_sum;
61.     }
62.
63.
64.
65.     int calculate(string s) {
66.         int new_start_pos = 0;
67.         int last_indx = s.size()-1;
68.         return recursive_calculator(s, new_start_pos, last_indx);
69.     }
70. };
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.

Top