题目:
题解:
代码 :
#include<bits/stdc++.h>
using namespace std;
unordered_map<char,int> pr={{'+',1},{'-',1},{'*',2},{'/',2}};
stack<int>num;
stack<char>op;
void eval(){
int b=num.top();num.pop();
int a=num.top();num.pop();
char c=op.top();op.pop();
int res=0;
if(c=='+'){
res+=a+b;
}else if(c=='-'){
res+=a-b;
}else if(c=='*'){
res+=a*b;
}else {
res+=a/b;
}
num.push(res);
}
int main(){
string str;
cin>>str;
for(int i=0,I=str.size();i<I;i++){
char c=str[i];
if(isdigit(c)){
int j=i,a=0;
while(j<I&&isdigit(str[j]))a=a*10+(str[j++]-'0');
num.push(a);
i=j-1;
}else if(c=='(')op.push(c);
else if(c==')'){
while(op.top()!='(')eval();
op.pop();
}else {
while(op.size()&&pr[op.top()]>=pr[c])eval();
op.push(c);
}
}
while(op.size())eval();
printf("%d",num.top());
return 0;
}