ACM -- 逆波兰表达式

      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;

}

 

你可能感兴趣的:(ACM)