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
| int core(string& s, int& l) { stack<int> stk; int n = s.size(); int num = 0; char sign = '+'; for (; l < n; ++l) { char c = s[l]; if (isdigit(c)) num = num * 10 + (c - '0'); if ((!isdigit(c) && c != ' ') || l == n - 1) { if (c == '(') num = core(s, ++l); int prev; switch (sign) { case '+': stk.push(num); break; case '-': stk.push(-num); break; case '*': prev = stk.top(); stk.pop(); stk.push(prev * num); break; case '/': prev = stk.top(); stk.pop(); stk.push(prev / num); break; default: break; } sign = c; num = 0; if (c == ')') break; } } int ret = 0; while (!stk.empty()) { ret += stk.top(); stk.pop(); } return ret; }
int caculator(string s) { int tmp = 0; return core(s, tmp); }
|