对于评估算术表达式,我使用 Donal Knuth 算法,它将表达式转换为后缀并使用后缀堆栈来解析表达式。我想知道,复数表达式有类似的东西吗?
可以做的事情例如: ((2+8i)*(12+3i)^(1/2))/34+21i
对于评估算术表达式,我使用 Donal Knuth 算法,它将表达式转换为后缀并使用后缀堆栈来解析表达式。我想知道,复数表达式有类似的东西吗?
可以做的事情例如: ((2+8i)*(12+3i)^(1/2))/34+21i
相同的技术。您只需定义可以执行的操作,并将操作数类型信息与堆栈中的值一起存储。
将'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,