只能处理没有-号的
#include<iostream>
#include<stack>
#include<unordered_map>
using namespace std;
stack<char>op;
stack<int>num;
string s;
void eval()
{
int b=num.top();
num.pop();
int a=num.top();
num.pop();
auto c=op.top();
op.pop();
if(c=='-')
a-=b;
else if(c=='*')
a*=b;
else if(c=='/')
a/=b;
else
a+=b;
num.push(a);
}
int main()
{
unordered_map<char,int>mp{{'/',2},{'*',2},{'+',1},{'-',1}};
cin >> s;
for(int i=0;i<s.size();i++)
{
char c=s[i];
if(isdigit(c))
{
int j=i;
int x=0;
while(j<s.size() && isdigit(s[j]))
{
x=x*10+s[j++]-'0';
}
num.push(x);
i=j-1;
}
else if(c=='(')
op.push('(');
else if(c==')')
{
while(op.top()!='(')
{
eval();
}
op.pop();
}
else
{
while(op.size()&& mp[op.top()]>=mp[c]) eval();
op.push(c);
}
}
while(op.size()) eval();
cout<<num.top()<<endl;
return 0;
}