逆波兰表达式的求解

34 篇文章 0 订阅
28 篇文章 0 订阅

至今看到的最简版:

---------------------------------------------------------------------------------------------

#include<iostream>
#include<math.h>
using namespace std;
double exp()
{
   char a[10];
   scanf("%s",a);//注意scanf取入字符串遇到‘\0’停止 
   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("%f",ans);

return 0;
}

------------------------------------------------------------------------------------------------

核心思想就是递归,计算7*8+9 即前缀表达式为  + * 7 8 9   的式子 程序执行过程如下图所示:

                                                                                     ()   +   ()

                                                                                        |               |

                                                                                       \ /             \  /

                                                                                  (  )  *  (  )     return 9 

                                                                                    |         |

                                                                                   \ /       \  /

                                                                            return 7    return  8

 

【1】读进第一个字符串,发现是+号  递归调用

【2】递归读进第二个字符串,发现是*号 递归调用

【3】递归读进第三个字符串,发现是数字,返回数字

··········

 

实现中常见问题:

【1】直接读进整个式子 再作分析,容易出现逻辑混乱的情况。

【2】不会使用atof()函数,自己写字符串转换为浮点数的函数,容易出错,考虑不全面。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值