解题报告2

【题目大意】
逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。
输入:
输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。
输出:
输出为一行,表达式的值。
可直接用printf(“%f\n”, v)输出表达式的值v。
例如:

输入 结果
* + 11.0 12.0 + 24.0 35.0 1357.000000

【解题思路】
该题需要根据输入的运算符进行多次运算,用递归求解是一种可行并且简便的方法。设计函数时首先要定义一个字符数组存入输入的数据,再进行判断。如果第一个字符是运算符,就把后两个字符按照这个运算符进行计算。如果第二个还是运算符则继续向下判断并计算下两个字符。如果判断到数字则用atof()函数将str类型数据转化为double类型数据。这样大致的递归框架就完成了:

double result() //定义一个double类型的函数
{
   
    if(a[0] == '+') //进行运算符的判断
    {
   
        return result() + result(); //返回相应运算符所表示的运算
    }
    else if(a[0] == '-')
    {
   
        return result() - result();
    }
    else if(a[0] == '*')
    {
   
        return result() * result();
    }
    else if(a[0] == '/')
    {
   
        return result() / result();
    }
    else
    {
   
        return atof(a); //如果是数字就转化为double类型
    }
}

对于测试数据:* + 11.0 12.0 + 24.0 35.0
解释为:(11.0 + 12.0)* (24.0 + 35.0)

【参考代码】

#include <bits/stdc++.h>
#define M 1000000
using namespace std;
char a[M];
double result()
{
   

    scanf("%s", a);
    if(a[0] == '+')
    {
   
        return result() + result();
    }
    else if(a[0] == '-')
    {
   
        return result
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大摆钟快递

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值