原题:
问题描述:
逆波兰表达式是一种吧运算符前置的算术表达式,例如普通的表达式2+3的逆波兰表示为+23.逆波兰表达式的优点是运算符之间不必有优先级的关系,也不必有括号改变运算次序,例如(2+3)*4的逆波兰表示法为*+2 3 4.本题求解的逆波兰表达式的值。
输入数据:
输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。
输出要求:
输出为一行,即表达式的值。
输入样例:
* + 11.0 12.0 +24.0 35.0
输出样例:
1357.000000
解题思路:
递归思密达~
源码:
#include<stdio.h> #include<stdlib.h> #include<math.h> double exp() { char a[100]; scanf("%s",a); switch(a[0]) { case'+': return exp()+exp(); case'-': return exp()-exp(); case'*': return exp()*exp(); case'/': return exp()/exp(); default: return atof(a); } } int main() { double ans; ans=exp(); printf("%f\n",ans); return 0; } 9