ACM -- 算法小结(六)逆波兰表达式
- 逆波兰表达式
//问题描述:逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2+3的 //逆波兰表达式法为+ 2 3.逆波兰表达式的优点是运算符之间不必有优先级关系,也不必 //用括号改变运算次序。例如(2+3)*4的逆波兰表达式法为*+2 3 4.本题求解逆波兰表 //达式的值,其中运算符包括+、-、*、/ 四个。 //输入数据:输入为一行其中运算符和运算数之间都用空格分隔,运算数都是浮点数。 //输出要求:输出为一行,即表达式的值。 //输入样例:* + 11.0 12.0 + 24.0 35.0 //输出样例:1357.000000 //在递归函数中,针对当前的输入有5种情况: //输入的是常数,则表达式的值就是这个常数 //输入的是'+',则表达式的值是继续读入两个表达式并计算出它们的值,然后把它们 //的值相加.(输入'*','-','/'的情况一样)。 #include<stdio.h> #include<math.h> double exp() { char a[10]; scanf("%s",a);//scanf输入语句遇到空格就会停止输入 switch(a[0]) { case'+':return exp()+exp(); case'-':return exp()-exp(); case'*':return exp()*exp(); case'/':return exp()/exp(); default:return atof(a);//atof函数:将字符串转换为浮点型数据 } } int main() { double ans; ans=exp(); printf("%f\n",ans); return 0; }