• 【转载】2.2基本算法之递归和自调用函数 逆波兰表达式分析—心机深


    原文请     -->点击<--


    以下是转载内容:

    申明:方法来自此博客

    一、原题

    1696:逆波兰表达式

    总时间限制: 1000ms 内存限制: 65536kB

    描述

    逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。

    输入

    输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。

    输出

    输出为一行,表达式的值。
    可直接用printf("%f ", v)输出表达式的值v。

    样例输入

    * + 11.0 12.0 + 24.0 35.0

    样例输出

    1357.000000

    提示

    可使用atof(str)把字符串转换为一个double类型的浮点数。atof定义在algorithm中。
    此题可使用函数递归调用的方法求解。

    来源

    计算概论05

    二、分析

    这道题要用递归读,如果读到加减乘除号就读下两个数,然后返回这两个数的加减乘除结果,基本格式如下:
    double f(){  
        scanf("%s",a);  
        if(a[0]=='+') ...  
        else if(a[0]=='-') ...  
        else if(a[0]=='*') ...  
        else if(a[0]=='/') ...  
        else ...  
    }  
    然后,我们需要进一步的处理,把加减乘除的步骤用各个if来表示,层层递归,如果是数字就返回,如果是运算符,就递归读入,并进行加减。以下是进一步的格式:
    double f(){  
        scanf("%s",a);  
        if(a[0]=='+')  
            return f()+f();  
        else if(a[0]=='-')  
            return f()-f();  
        else if(a[0]=='*')  
            return f()*f();  
        else if(a[0]=='/')  
            return f()/f();  
        else  
            return atof(a);  
    }  
    此时,atof的用处就出来了,它可以把字符串转换成double类型的数,很是方便,如果你不懂atof是什么,请点击这里

    三、源程序

    #include<cstdio>  
    #include<cmath>  
    #include<iostream>  
    #include<algorithm>  
    using namespace std;  
    char a[55];  
    double f(){  
        scanf("%s",a);  
        if(a[0]=='+')  
            return f()+f();  
        else if(a[0]=='-')  
            return f()-f();  
        else if(a[0]=='*')  
            return f()*f();  
        else if(a[0]=='/')  
            return f()/f();  
        else  
            return atof(a);  
    }  
    int main()  
    {  
        printf("%f
    ",f());  
    }
                                                                                                                                                                    By ZJF
                                                                                                                                                                转载 WZY



  • 相关阅读:
    scanf使用尿性
    System : Assembly Programming
    Biology 03: Cardiovascular
    remove the smallest element from a linkedlist
    Relativity 04: CH4CH5
    Relativity 03: Space and Time in Classical Mechanics
    146 __str__和__repr__
    145 __init__和__new__
    144 __call__
    143 __doc__
  • 原文地址:https://www.cnblogs.com/LinqiongTaoist/p/7203765.html
Copyright © 2020-2023  润新知