描述
波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2+3的波兰表示法+2 3。波兰表达式的优点是运算符之间不必有优先级关系,也不用括号,
例如(2+3)*4的波兰表达式为*+2 3 4;本题求解波兰表达式的值,其中运算法只有* + - /.每个数据最多不超过100。
输入
输入数据有多组,每组一行表达式,其中运算符和运算数之间用空格表示,每行不超过100个字符。
输出
输出结果值,保留六位小数。
样例输入
* + 11.0 12.0 + 24.0 35.0
样例输出
1357.000000
思路:读取到运算符时再次调用函数读入数据,直到读到一组数据为止return。多个运算符运用了递推的思想。
小技巧:stod可以强制转化string类型为longdouble使得程序看起来更简洁。
code:
#include<bits/stdc++.h>
using namespace std;
string s;
double f()
{
if (!(cin >> s))
exit(0);
if (s == "+")
return f() + f();
else if (s == "-")
return f() - f();
else if (s == "*")
return f() * f();
else if (s == "/")
return f() / f();
else return stod(s);
}
int main()
{
while (1)
{
printf("%.6f\n", f());
}
return 0;
}