SHARE
TWEET

Untitled

a guest May 26th, 2019 66 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class Solution {
  2. public:
  3.     int calculate(string s) {
  4.         stack<long> num_stack = {};
  5.         stack<char> op_stack = {};
  6.         long n1 = 0;
  7.         long n2 = 0;
  8.         char op = 'N';
  9.         long prevNum = 0;
  10.         char prevOp = 'N';
  11.         for (char c: s) {
  12.             if (c == '+' || c == '-') {
  13.                 if (op != 'N') {
  14.                     n1 = eval(n1, n2, op);
  15.                     n2 = 0;
  16.                 }
  17.                 if (prevOp != 'N') {
  18.                     n1 = eval(prevNum, n1, prevOp);
  19.                     n2 = 0;
  20.                     prevOp = 'N';
  21.                 }
  22.                 op = c;
  23.             } else if (c == '*' || c == '/') {
  24.                 if (op == '*' || op == '/') {
  25.                     n1 = eval(n1, n2, op);
  26.                     n2 = 0;
  27.                 } else if (op == '+' || op == '-') {
  28.                     prevNum = n1;
  29.                     n1 = n2;
  30.                     n2 = 0;
  31.                     prevOp = op;
  32.                 }
  33.                 op = c;
  34.             } else if (c >= '0' && c <= '9') {
  35.                 if (op == 'N') {
  36.                     n1 = n1 * 10 - '0' + c;
  37.                 } else {
  38.                     n2 = n2 * 10 - '0' + c;
  39.                 }
  40.             } else if (c == '(') {
  41.                 op_stack.push('(');
  42.                 if (prevOp != 'N') {
  43.                     num_stack.push(prevNum);
  44.                     op_stack.push(prevOp);
  45.                     prevNum = 0;
  46.                     prevOp = 'N';
  47.                 }
  48.                 if (op != 'N') {
  49.                     num_stack.push(n1);
  50.                     op_stack.push(op);
  51.                     n1 = 0;
  52.                     n2 = 0;
  53.                     op = 'N';
  54.                 }
  55.             } else if (c == ')') {
  56.                 if (op != 'N') {
  57.                     n1 = eval(n1, n2, op);
  58.                     n2 = 0;
  59.                     op = 'N';
  60.                 }
  61.                 if (prevOp != 'N') {
  62.                     n1 = eval(prevNum, n1, prevOp);
  63.                     prevOp = 'N';
  64.                     prevNum = 0;
  65.                 }
  66.                 n2 = n1;
  67.                 if (op_stack.top() != '(' && !num_stack.empty()) {
  68.                     n1 = num_stack.top();
  69.                     num_stack.pop();
  70.                     op = op_stack.top();
  71.                     op_stack.pop();
  72.                 } else {
  73.                     n1 = n2;
  74.                     n2 = 0;
  75.                     op = 'N';
  76.                 }
  77.                 if (op_stack.top() != '(') {
  78.                     prevNum = num_stack.top();
  79.                     num_stack.pop();
  80.                     prevOp = op_stack.top();
  81.                     op_stack.pop();
  82.                 }
  83.                 op_stack.pop();
  84.             }
  85.         }
  86.         int res = n1;
  87.         if (op != 'N') {
  88.           res = eval(n1, n2, op);
  89.         }
  90.         if (prevOp != 'N') {
  91.           res = eval(prevNum, res, prevOp);
  92.         }
  93.         return res;
  94.     }
  95.  
  96. private:
  97.     long eval(long n1, long n2, char op) {
  98.         if (op == '+') {
  99.           return n1 + n2;
  100.         } else if (op == '-') {
  101.           return n1 - n2;
  102.         } else if (op == '*') {
  103.           return n1 * n2;
  104.         } else {
  105.           return n1 / n2;
  106.         }
  107.     }
  108. };
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. OK, I Understand
 
Top