我必须编写一个程序来测试两个代数表达式是否相等。它应该遵循MDAS优先级和括号分组。为了解决优先级的问题,我想我应该为这些表达式实现一个Infix到Postfix Notation转换器。但通过这样做,我无法得出它们的等价性。
该程序应如下所示: 用户输入:a *(a + b)= a * a + a * b 输出:等价
对于这个问题,我不允许使用计算机代数系统或任何外部库。如果您有实际代码,请不要发布实际代码,我只需要一个想法来解决这个问题。
答案 0 :(得分:1)
这是一个想法:
您需要首先实现构建expression tree,因为它是表达式的非常自然的表示
那么也许你需要使用关联或分布式代数属性通过开括号等来简化它
然后你将不得不比较树木。这并不明显,因为你需要在交换操作等中处理所有分支排列。例如。你可以对它们进行排序(我的意思是分支)然后比较相等。此外,您需要记住可能的参数重命名,即a + b需要等于x + y。
答案 1 :(得分:1)
如果不允许评估表达式,则必须将它们解析为表达式树。
之后,我会通过乘以/除以所有成员来摆脱所有括号,使得(b - c)变成a * b - a * c。
然后将所有表达式转换回字符串,确保所有成员按字母顺序排序(a * b,而不是b * a),删除所有空格并比较字符串。