以下哪个后缀表示法正确表示中缀和 1+2+3+4?
-
27-09-2019 - |
题
我正在测试中缀到后缀到中缀转换器并发现某种不确定性。例如,一个简单的中缀和
1 + 2 + 3 + 4
可以转换为后缀一
1 2 + 3 + 4 +
假设具有相同优先级的运算符没有累积。如果他们是那么我得到
1 2 3 4 + + +
另一方面,以下所有后缀表达式都可以转换为初始和
1 2 + 3 + 4 +
1 2 + 3 4 + +
1 2 3 4 + + +
这些后缀表达式都正确吗?
更新1
如果你要制作这样的转换器,你会选择哪种形式?我需要选择一个进行测试。
解决方案
您需要定义一个额外的约束。
从数学上讲,您的后缀表达式都是相同的。但在计算机上,由于溢出,整数加法实际上并不可交换。
将 1 2 3 4 替换为 a b c d 并考虑溢出的可能性。大多数编程语言都定义了这一点 a + b + c + d
必须从左到右评估,以便 a b + c + d +
是唯一正确的翻译。
仅当您定义评估顺序为“未指定”时,所有后缀版本都是等效的。(旧的)C 编译器就是这种情况。
其他提示
是的,都正确。它们与以下括号中的表达式相对应: 通用标签
+
令人困惑-它是可交换的,因此实际上每个结果似乎都是正确的。
考虑用其他运算符替换+
。1 a 2 b 3 c 4
。
对于左关联运算符,此处的正确结果是
通用标签
所以,就您而言,我希望1 2 + 3 + 4 +
不隶属于 StackOverflow