题目描述
后缀表达式不包含括号,运算符(包括'+''-''*''/')放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:(2 + 1) * 3 , 即2 1 + 3 *。利用栈结构,将后缀表达式的结果计算出。
输入格式
后缀表达式。以#号作为表达式结束标志。为了简单,处理的数据为0-9的整数。
输出格式
计算结果。
输入输出样列
输入样例1:复制
3 6 6 2 / - 3 * + #
输出样例1:复制
12
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<sstream>
#include<algorithm>
#include<cstring>
#include<stack>
#include<string>
#include<cstdio>
#include<vector>
#include<deque>
#include<queue>
using namespace std;
string s[10005];
stack <int> num;
void js(string op){
int l=num.top();num.pop();
int r=num.top();num.pop();
if(op=="+"){
num.push(r+l);
}
if(op=="-"){
num.push(r-l);
}
if(op=="*"){
num.push(r*l);
}
if(op=="/"){
num.push(r/l);
}
}
int main(){
int t=1;
while(cin>>s[t]&&s[t]!="#"){
t++;
}
t--;
for(int i=1;i<=t;i++){
if(s[i][0]>='0'&& s[i][0]<='9'){
int x;
stringstream sin;
sin<<s[i];
sin>>x;
num.push(x);
}
else{
js(s[i]);
}
}
cout<<num.top();
return 0;
}