数学表达式在编码问题我一直在工作了一段时间,我来了一步,我必须评估的数学表达式,看起来像这样:评价在C++
3 * 2^3^2 * 5
而且应该这样进行评估:
3 * 2^3^2 * 5 = 3 * 2^(3 * 2) * 5 = 3 * 64 * 5 = 960.
在我目前的实施形式,我有两个向量,一个包含了操作数为整数,而另一个包含了运营商作为一个字符。
对于目前的情况,它们是:vector<int> operands = { 3, 2, 3, 2, 5 }
和vector<char> operators = { '*', '^', '^', '*' }
。
这只是一个示例,操作顺序可能不同,因为乘法可能不总是要执行的第一个/最后一个操作。
我一直在这个特定的步骤停留了一段时间,即评估由两个向量容器封装到一个整数的表达式。我看过一些我可以在网上找到的数学解析器,但我仍然没有看到如何实施正确的评估。
解决方案将非常感谢。
你真的是指'2 ^(3 * 2)'而不是'2 ^(3^2)'? –
不,这实际上是问题强加的表达形式,对此不能做很多。 2^3^2应该被认为是2 ^(3 * 2)= 2^6,更一般地说是y^x1^x2^...^xn = y ^(x1 * x2 * .... * xn)。 – user43389
@ user43389否,2^3^2应评估为2 ^(3^2),= 2^9 = 512,并注意它是右关联的。你写的东西没有意义。 – EJP