对于一个给定的后缀表达式,(如果它是合法的)
注意:次算法是基于基本操作符是2元操作符且操作数为一位正整数!
其求值的基本思想是:对于给定的表达式进行遍历,假设遇到的是操作数就将其压入栈;假设遇到的是操作符,将栈顶的两个元素弹出,假设栈顶两个元素依次为a,b(a在上b在下),将次操作符应用于这两个栈顶元素,比方b-a(注意b在左a在右)然后将计算结果压入栈(用来充当下一个操作符的操作数);
最后输出栈顶元素即为结果(事实上假设表达式合法终于栈里面一定会仅仅有一个元素)
#include <stdio.h> //后缀表达式求值
#include <iostream>
#include <cstring>
#include <stack>
#include <ctype.h>
#include <algorithm>
using namespace std;
int main()
{
char c;
stack <int> s;
while(scanf("%c",&c)!=EOF)
{
if(c=='#')break;
if(isdigit(c))
s.push(c-'0');
else
{
int a=s.top();
s.pop();
int b=s.top();
s.pop();
switch(c)
{
case '+':s.push(b+a);break;
case '-':s.push(b-a);break;
case '*':s.push(b*a);break;
case '/':s.push(b/a);break;
}
}
}
cout<<s.top()<<endl;
return 0;
}