• 逆波兰表达式POJ——2694


    问题描述:

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

    输入数据:

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

    输出要求:

    输出为一行,即表达式的值。

    输入样例:

    * + 11.0 12.0 +24.0 35.0+

    输出样例:

    1357.000000

    解题思路:

    这个问题看上去有些复杂,如果只是简单地模拟计算步骤不太容易想清楚,但是如果用递归的思想就非常容易想清楚。这里根据逆波兰表达式的定义进行递归求解。在递归函数中,针对当前的输入有5种情况:1。输入是常数,则表达式的值就是这个常数;2.输入的是‘+’,则表达式的值是再继续读入两个表达式并计算出他们的值,然后将他们的值进行相加;3.输入‘-’;4.输入是‘*’;5.输入是‘/’;后三种情况与2.相同,只是计算从‘+’变成‘-’,‘*’,‘/’。

    代码:

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include <stdlib.h>
    using namespace std;
    double exp()
    {
        char a[10];
        cin>>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("%lf
    ",ans);
        return 0;
    }
    以大多数人努力程度之低,根本轮不到去拼天赋~
  • 相关阅读:
    蝴蝶自在——《萍踪侠影》
    学习OpenCV——关于三通道的CvMat的求和问题
    MFC中的OnTimer和SetTimer
    慎重选择博士后(或博士生)导师
    MFC界面的完善
    MFC CSplitterWnd的用法
    断言(ASSERT)的用法
    OpenCV中lib的添加
    【转】数据结构之位图
    【转】关于windows server 2003不能共享问题
  • 原文地址:https://www.cnblogs.com/gcter/p/7374481.html
Copyright © 2020-2023  润新知