运用递归实现计算器加减乘除带括号优先级算法

看了某些csdn博客的计算器带括号优先级算法并不能很好地处理复杂的算式。这里自己就写了一个可以处理复杂算式的算法。


我的思路:递归

先看下面这个算式:

String s5="(343+5757/3*(787-45+780)-9*233+(787+909-(32*7))*555/(7+88*565-99))";

运算结果:


如何让算法智能地算出这个字符串的结果呢?

先想想我们在碰到这种算式时是怎么开始的,首先,我们会找到这个算式的优先级,比如我们更希望先得到787-45+780的结果,再让这个结果乘上3,同样,我们更希望得到32*7的结果后再让909减去它。所以同样的道理,如果有n级括号,我们理所当然地希望先得到最里面的结果,再把结果返回给上一层,并参与上一层的运算


比如下面的例子:

按照上面的流程,我们只需从第5层开始,按照箭头的逆方向分别返回结果并和上一层的数字相运算,以此类推,最终我们便能得到结果。


那么我们该怎么开始呢?虽然我们看流程已经知道可以用递归实现,但是我们应该怎么选择,怎么封装,需要哪些工具方法才能帮助我们实现呢?我们发现,如果仅仅是用递归处理字符串是完全不够的,因为至少一个字符串不能智能地拆分成多个子字符串,那么有人就会想可以定义一个方法处理字符串得到多个子字符串,但是这样的话参数又不匹配了,传的是一个String,但是我们得到的却又是String[],那么有人又说可以把一个String装成数组传进去,再用方法得到多个String,再。。。好吧,虽然可能能实现,但是肯定会比较复杂,说不定人就晕了。


选择方式:如果我们仔细观察上面的流程话就会发现有些类似的地方-----java的File类

每一个File都能listFile出一堆File,这不正好和流程图有着异曲同工之妙吗?所以我们第一要做的就是封装类


这里自己写了个类叫做WiseString,意为智能的字符串,下面先看WiseString类一个主要的函数,该函数用来把一个WiseString按加减法或者乘除法分割成同等级的若干 子WiseString(即表达式,如把(3+4-5)/3+2*6*7-999分成(3+4-5)/3,2*6*7和999

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值