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