class Solution {
public:
int solve(string s) {
stack<int> val;
stack<char> ops;
for(int i=0; i<=s.length();){
if(s[i]>='0'&&s[i]<='9')
val.push(toInt(s, i));
else if(ops.empty()||ops.top()=='('||s[i]=='(')
ops.push(s[i++]);
else if(s[i]=='*'){
int t1=val.top(),t2=toInt(s, ++i);
val.pop();
val.push(t1*t2);
}
else{
int t2=val.top();
val.pop();
int t1=val.top();
val.pop();
if(ops.top()=='+')
val.push(t1+t2);
else if(ops.top()=='-')
val.push(t1-t2);
else if(ops.top()=='*')
val.push(t1*t2);
ops.pop();
if(s[i]==')'){
ops.pop();
i++;
}
else if(i==s.length())
break;
}
}
return val.top();
}
int toInt(string s,int &i){
int tmp=0;
while(s[i]<='9'&&s[i]>='0')
tmp=tmp*10+s[i++]-'0';
return tmp;
}
};