需求
计算逆波兰表达式(后缀表达式)
逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法,按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。
正常的表达式逆波兰表达式
a + ba b +a + (b - c)a b c - +a + (b - c) * da b c - d * +a + d * (b - c)a d b c - * +a = 1 + 3a = 1 3 +
测试数据
35.0 24.0 + 12.0 11.0 + *
下面写的代码是使用了freopen的,可以在f盘建一个叫data.txt的文件把数据放进去,代码会直接读取,如果想手动输入就把freopen那一行注释掉。
代码
#include <vector>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
double exp(
vector<string>& v)
{
string s = v.back();
v.pop_back();
const char* c = s.data();
switch(c[
0]) {
case '+':
return exp(v) +
exp(v);
case '-':
return exp(v) -
exp(v);
case '*':
return exp(v) *
exp(v);
case '/':
return exp(v) /
exp(v);
default:
return atof(c);
}
}
int main()
{
static vector<string> v;
freopen(
"f:\\data.txt",
"r", stdin);
string s;
while(
cin >> s) {
v.push_back(s);
}
cout <<
exp(v) << endl;
return 0;
}