我一直在查看维基页面:http://en.wikipedia.org/wiki/Shunting-yard_algorithm
我已经使用代码示例来构建第一部分,基本上我现在可以转向:
3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3
加入3 4 2 * 1 5 − 2 3 ^ ^ / +
但我不知道如何使用3 4 2 * 1 5 − 2 3 ^ ^ / +
获取3.00012207
wiki上的示例代码和解释对我没有任何意义。
有人可以解释如何评估3 4 2 * 1 5 − 2 3 ^ ^ / +
并提出答案。提前致谢。我不需要代码示例只是一个很好的解释或示例的细分。
不重要但我正在工作.net C#。
答案 0 :(得分:9)
分流码算法的目的是它的输出是Reverse Polish Notation,这很容易评估:
答案 1 :(得分:8)
修复后的表示法是您在HP计算器中进行数学计算的方法。
保持筹码,每当你得到一个数字时,将其添加到顶部。每当你让操作员从顶部消耗输入然后将结果添加到顶部
token stack
*empty*
3 3 //push numbers...
4 3 4
2 3 4 2
* 3 8 //remove 4 and 2, add 4*2=8
1 3 8 1
5 3 8 1 5
- 3 8 -4
2 3 8 -4 2
3 3 8 -4 2 3
^ 3 8 -4 8
... ...
答案 2 :(得分:2)
从左到右处理元素3 4 2 * 1 5 − 2 3 ^ ^ / +
,如下所示:
当你到达目的地时,堆栈应该有一个元素,这将是结果。
答案 3 :(得分:2)
我看到我有点迟到了。
我看到了这个问题,并为Rosetta Code编写了几个任务。事实恰恰相反,this task可能就是你所追求的。它给出了一个关于在计算RPN表达式的值时会发生什么情况的表格,表示令牌。
以下是其输出的示例:
For RPN expression: '3 4 2 * 1 5 - 2 3 ^ ^ / +'
TOKEN ACTION STACK
3 Push num onto top of stack 3
4 Push num onto top of stack 3 4
2 Push num onto top of stack 3 4 2
* Apply op to top of stack 3 8
1 Push num onto top of stack 3 8 1
5 Push num onto top of stack 3 8 1 5
- Apply op to top of stack 3 8 -4
2 Push num onto top of stack 3 8 -4 2
3 Push num onto top of stack 3 8 -4 2 3
^ Apply op to top of stack 3 8 -4 8
^ Apply op to top of stack 3 8 65536
/ Apply op to top of stack 3 0.0001220703125
+ Apply op to top of stack 3.0001220703125
The final output value is: '3.0001220703125'