问题链接:CCF NOI1121 逆波兰表达式。
时间限制:
1000 ms 空间限制: 262144 KB
题目描述
逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。
输入
输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。
输出
输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。
样例输入
* + 11.0 12.0 + 24.0 35.0
样例输出
1357.000000
数据范围限制
1<a<32768
提示
可使用atof(str)把字符串转换为一个double类型的浮点数。atof定义在stdlib.h中。
问题分析
这是一个计算问题。
逆波兰表达式通常用堆栈来处理,递归调用与堆栈具有同样的效果。
(略)
要点详解
- 用递归函数来处理逆波兰表达式。
参考链接:(略)。
100分通过的C语言程序:
#include <stdio.h> #include <stdlib.h> #define N 32 char a[N]; double calculate() { scanf("%s", a); if(a[0] == '+') return calculate() + calculate(); else if(a[0] == '-') return calculate() - calculate(); else if(a[0] == '*') return calculate() * calculate(); else if(a[0] == '/') return calculate() / calculate(); else return atof(a); } int main(void) { printf("%lf ", calculate()); return 0; }