内存限制:128 MB
时间限制:1.000 S
标准输入输出
题目类型:传统
评测方式:文本比较
上传者:
提交:32
通过:12
逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2+3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运次序,例如(2+3)*4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。
输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数(double型)。
输出为一行,表达式的值(结果保留小数点后6位小数)。
1.字符数组变数字数组
2.使用头文件#include<cstring>,可以使用cin.getline(s,100),输入含有99个字符的字符串s,字符串中可以包含空格
注意:使用cin输入时遇到空格或者换行就结束一次输入
方法一:使用递归。
将运算符和数字做一个分离,查找可以运算的数字和运算符,运算结果作为下一次运算的运算数字,这个过程递归调用
方法二:
可以把前缀逆波兰表达式变为后缀逆波兰表达式,利用栈“先进后出”的机制,栈中存储待计算的数字,遇到运算符则弹出栈顶的两个数字参与运算,运算结果依然压入栈中,等待下一次运算。
对于栈可以引入头文件#include<stack>使用栈的操作
定义栈:stack<数据类型> 栈名 例如:stack<int> a;
获取栈顶元素:int c=a.top();
将元素弹出栈:a.pop();
将元素x压入栈:a.push(x)