处理后缀表达式的核心步骤及原理
AC代码
#include <bits/stdc++.h>
using namespace std;
string a;
stack<int> q;
int main() {
while(!q.empty()) {
q.pop();
}
cin>>a;
for(int i=0; i<a.size(); i++) {
if(isdigit(a[i])) {
int j,x=a[i]-'0';
for(j=i+1; j<a.size()&&isdigit(a[j]); j++) {
x=x*10+(a[j]-'0');
}
i=j-1;
q.push(x);
} else if(a[i]=='-') {
if(q.size()>1) {
int t1=q.top();
q.pop();
int t2=q.top();
q.pop();
q.push(t2-t1);
} else {
int t1=q.top();
t1=-t1;
q.push(t1);
}
} else if(a[i]=='+') {
if(q.size()>1) {
int t1=q.top();
q.pop();
int t2=q.top();
q.pop();
q.push(t1+t2);
}
} else if(a[i]=='/') {
int t1=q.top();
q.pop();
int t2=q.top();
q.pop();
q.push(t2/t1);
} else if(a[i]=='*') {
int t1=q.top();
q.pop();
int t2=q.top();
q.pop();
q.push(t1*t2);
} else {
continue;
}
}
printf("%d",q.top());
return 0;
}