AcWing 3302. 表达式求值
原题链接
中等
作者:
xi.xi
,
2025-04-09 17:44:53
· 四川
,
所有人可见
,
阅读 2
#include<iostream>
#include<algorithm>
#include<stack>
#include<unordered_map>
#include<cstring>
using namespace std;
const int N =100010;
stack<int> num;
stack<char> op;
void eval(){
auto b = num.top(); num.pop();
auto a = num.top(); num.pop();
auto c = op.top(); op.pop();
int x;
if(c=='+') x = a+b;
else if (c=='-') x=a-b;
else if(c=='*') x=a*b;
else x=a/b;
num.push(x);
}
int main(){
unordered_map <char,int> pr { {'+',1},{'-',1},{'*',2},{'/',2} };
string str;
cin>>str;
for(int i =0;i<str.size();i++){
auto c =str[i];
if(isdigit(c)){
int x=0,j=i;
while (j<str.size()&&isdigit(str[j]))
x = x*10+str[j++]-'0';
i=j-1;
num.push(x);
}
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();
cout<<num.top()<<endl;
return 0;
}