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; } };