【模板】表达式求值
代码如下
#include <bits/stdc++.h>
using namespace std;
const int maxn=1010;
stack<int> num;
stack<char> ops;
char s[maxn];
inline int grade(char s){return s=='('?1:s=='+'||s=='-'?2:3;}
inline void calc(char op){
int x=num.top();num.pop();
int y=num.top();num.pop();
if(op=='+')num.push(x+y);
else if(op=='-')num.push(x-y);
else if(op=='*')num.push(x*y);
else num.push(x/y);
}
int solve(char *s){
int val=0;
for(int i=1;i<=strlen(s+1);i++){
if(isdigit(s[i])){
val=val*10+s[i]-'0';
if(isdigit(s[i+1]))continue;
num.push(val);val=0;
}else if(s[i]=='(')ops.push(s[i]);
else if(s[i]==')'){
while(ops.top()!='(')calc(ops.top()),ops.pop();
ops.pop();
}else{
while(ops.size()&&grade(ops.top())>=grade(s[i]))calc(ops.top()),ops.pop();
ops.push(s[i]);
}
}
while(ops.size())calc(ops.top()),ops.pop();
return num.top();
}
int main(){
scanf("%s",s+1);
printf("%d\n",solve(s));
return 0;
}