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;
}

 

posted @ 2013-09-26 14:04  lmei  阅读(648)  评论(0编辑  收藏  举报