class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回表达式的值
     * @param s string字符串 待计算的表达式
     * @return int整型
     */
    int solve(string s) {
        // write code here
        stack<int> ret;
        int num = 0;
        char sign = '+';
        for (int i=0; i<s.size(); ++i) {
            if (s[i] >= '0' && s[i] <= '9') {
                num = 10 * num + s[i] - '0';
            } else if (s[i] == '(') {
                int left = i, count = 1;
                while (count > 0) {
                    i++;
                    if (i >= s.size()) {
                        throw string("invalid expr");
                    }
                    if (s[i] == '(') {
                        ++count;
                    } else if (s[i] == ')') {
                        --count;
                    }
                }
                num = solve(s.substr(left+1, i - left -1));
            }
            if (s[i] == '+' || s[i] == '-' || s[i] == '*' || i == s.size() - 1) {
                if (sign == '+') {
                    ret.push(num);
                } else if (sign == '-') {
                    ret.push(-num);
                } else if (sign == '*') {
                    ret.top() *= num;
                }
                sign = s[i];
                num = 0;
            }
        }
        while(!ret.empty()) {
            num += ret.top();
            ret.pop();
        }
        return num;
    }
};