#include<iostream>
#include<string>
#include<stack>
#include<unordered_map>
using namespace std;
stack<int>st;
stack<char>op;
unordered_map<char,int>pr={{'+',1},{'-',1},{'*',2},{'/',2}};
void eval(){
int b=st.top();
st.pop();
int a=st.top();
st.pop();
char ox=op.top();
op.pop();
int x;
if(ox=='+')x=a+b;
else if(ox=='-')x=a-b;
else if(ox=='*')x=a*b;
else x=a/b;
st.push(x);
}
int main(){
string s;
cin>>s;
for(int i=0;i<s.size();i++){
if(isdigit(s[i])){
int j=i;
int n=0;
while(j<s.size()&&isdigit(s[j]))n=n*10+s[j++]-'0';
i=j-1;
st.push(n);
}
else if(s[i]=='(')op.push(s[i]);
else if(s[i]==')'){
while(op.size()&&op.top()!='(')eval();
op.pop();
}
else{
while(op.size()&&pr[op.top()]>=pr[s[i]])eval();
op.push(s[i]);
}
}
while(op.size())eval();
cout<<st.top();
return 0;
}
如果想要计算其它的运算符,只需在map里加上该运算符并设置合适的优先级即可。