java 如何将RPN算法中的值相加

uxhixvfz  于 2023-01-19  发布在  Java
关注(0)|答案(2)|浏览(126)

我在写一个计算数值的计算器 从表达式:
3+(23/24)*34/24
我使用RPN算法:https://en.wikipedia.org/wiki/Reverse_Polish_notation
我现在已经在字符串中排序表达式:
3 23 24 / 34 * 24 / +
我不知道如何从这个表达式中得到值。
谢谢

ffscu2ro

ffscu2ro1#

RPN背后的基本思想是,存在一个堆栈,所有参数都被放入其中,然后为某个操作取出。
对于此集合,基本流程为:
| 元素|堆栈|项目a|b.人口基金|
| - ------|- ------|- ------|- ------|
| 按3|三个|||
| 推23|三、二十三|||
| 推动器24|三、二十三、二十四|||
| - 划分||||
| 流行b|三、二十三||二十四|
| 波普阿|三个|二十三|二十四|
| 按a/b|3、0.9583|||
| 端部分水岭||||
| 推动器34|3、0.9583、34|||
| - 乘||||
| 流行b|3、0.9583||三十四|
| 波普阿|三个|0.9583|三十四|
| 按a * b|三、32.5833|||
| 端乘||||
| 推动器24|三、三十二、五八三三、二十四|||
| - 划分||||
| 流行b|三、32.5833||二十四|
| 波普阿|三个|三十二五八三三|二十四|
| 按a/b|3、1.3576|||
| 端部分水岭||||
| 加||||
| 流行b|三个||一点三五七六|
| 波普阿||三个|一点三五七六|
| 按a + b|四点三五七六|||
| 端加||||
解决方案!

nxagd54h

nxagd54h2#

基本算法基于堆栈式结构
对于表达式中的每个标记:

  • 如果是数字:推它
  • 如果是符号:弹出2个值;进行匹配操作;推动结果

例如:

"3 23 24 / 34 * 24 / +"
                                             Stack
3:  push 3                                   |   3
23: push 23                                  |   3    23
24: push 24                                  |   3    23     24
/:  pop (24),   pop (23),    push 23/24      |   3     0.95
34: push 34                                  |   3     0.95  34
*:  pop (34),   pop (0.95),  push 0.95*34    |   3    32.58
24: push 24                                  |   3    32.58  24
/:  pop (24),   pop (32.58), push 32.58/24   |   3     1.35
+:  pop (1.35), pop (3),     push 3+1.35     |   4.35

堆栈中保留的最后一个值是结果

相关问题