对于评估算术表达式,我使用Donal Knuth算法,该算法将表达式转换为postfix,并使用后缀堆栈来解析表达式。我想知道,复数表达式有类似的东西吗?
可以做的事情例如:((2 + 8i)*(12 + 3i)^(1/2))/ 34 + 21i
答案 0 :(得分:1)
相同的技巧。您只需定义可以执行的操作,并将操作数类型信息与值一起存储在堆栈中。
答案 1 :(得分:1)
将'i'定义为一元运算符,将堆栈中的最后一个操作数乘以'i'; 您可以将堆栈中的每个值与类型相关联,但也可以通过始终按下两个数字来处理:真实组件和显式零。
然后(2 + 8i)处理为
push 2 [and 0]
push 8 [and 0]
push i
-> pop 8 and 0
-> push 0 and 8
push +
-> pop 0 and 8
-> pop 2 and 0
push 2 and 8
我认为这可以将表达式处理为(2+(2 + 2)i),还可以处理(2 + 2i)i,