Reverse Polish notation(逆波兰式)
介绍
逆波兰式(也叫后缀表达式)是一种将算数表达式的运算符写在操作数后面的表示方法。例如,在传统的波兰式(中缀表达式)中,表达式 (1+2)*(5+4) 在逆波兰式中可以表示为 1 2 + 5 4 + * 。逆波兰式的优点之一是它是无括号。
逆波兰式的计算
新建一个表达式,如果当前字符为变量或者为数字,则压栈,如果是运算符,则将栈顶两个元素弹出作相应运算,结果再入栈,最后当表达式扫描完后,栈里的就是结果。
代码如下:
#include <iostream>
#include <stack>
#include <cstdlib>
#include <cstdio>
using namespace std;
int main()
{
stack<int> stack;
string input;
while(cin >> input)
{
if(input == "+")
{
int post = stack.top(); stack.pop();
int pre = stack.top(); stack.pop();
stack.push(pre + post);
}
else if(input == "-")
{
int post = stack.top(); stack.pop();
int pre = stack.top(); stack.pop();
stack.push(pre - post);
}
else if(input == "*")