zoukankan      html  css  js  c++  java
  • 逆波兰表达式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;
    }
    以大多数人努力程度之低,根本轮不到去拼天赋~
  • 相关阅读:
    Online
    C语言的原码,反码,补码
    PHP常用函数
    [javascript] npx 命令简单使用
    [javascript] vue的实例生命周期钩子函数
    curl扩展post请求http接口报错:failed creating formpost data
    [javascript] 基于elementui的后台界面开发
    [javascript] var let const声明变量的区别
    [PHP] 实现oauth下的单点登陆
    [日常] KRA与KPI 绩效考核
  • 原文地址:https://www.cnblogs.com/gcter/p/7374481.html
Copyright © 2011-2022 走看看