65,212
社区成员
发帖
与我相关
我的任务
分享#include<bits/stdc++.h>
using namespace std;
int flag(char c){
int ret=0;
switch(c){
case '+': ret=1; break;
case '-': ret=1; break;
case '*': ret=2; break;
case '/': ret=2; break;
case '(': ret=3; break;
// case ')': ret=3; break;
default: break;
}
return ret;
}
int main(){
stack<int> s1;
stack<char> s2;
char z='#';
s2.push(z);
string x;
cin>>x;
x+="#";
e3: for(int i=0;i<x.length();i++){
char c=x[i];
if(isdigit(c)){
if(flag(s2.top())>flag(c)){
char y=s2.top(); s2.pop();
int x1=s1.top(); s1.pop();
int x2=s1.top(); s1.pop();
switch(y){
case '+': s1.push(x1+x2); break;
case '-': s1.push(x1-x2); break;
case '*': s1.push(x1*x2); break;
case '/': s1.push(x1/x2); break;
// case '(': ret=3; break;
// case ')': ret=3; break;
default: break;
}
goto e3;
}
else if(flag(s2.top())<flag(c)){
s2.push(c);
continue;
}
else if(flag(s2.top())==flag(c)){
if(c=='#') break;
if(c=='('||c==')'){
s2.pop();
continue;
}
}
}
else{
s1.push(c);
}
}
while(!s1.empty()){
cout<<s1.top();
s1.pop();
}
return 0;
}