当前位置: 首页 > 知识库问答 >
问题:

数学表达式求解算法

年风华
2023-03-14

由于问题不清楚,我先前的问题被搁置。

用特定查询再次过帐

我的要求是使用PHP解决任何数学复杂表达式。例如,

如果我有一个字符串“1(12)/34”,使用BODMAS规则,我必须求解它。但我也必须得到所有单独的步骤。

我提到的两个网站是:
http://www.careerbless.com/calculators/ScientificCalculator/
http://web2.0calc.com/

我的第一个问题是,哪种语言是解决这类问题的理想语言。此外,是否有任何内置解决方案可供使用,这样我就不必重新发明轮子

提前谢谢

共有1个答案

郁明诚
2023-03-14

堆栈可能会帮助您,请考虑:1(2 3)

创建两个堆栈,一个是数字,另一个是运算符

当您找到一个数字时,放入数字堆栈,当您找到一个运算符时,放入运算符堆栈,当您找到“(“什么都不做,当您找到一个”)”时,获取堆栈中的两个数字和一个运算符,对这两个数字进行计算,然后再次放入数字堆栈,请参见代码循环:

//1 + (2 + 3)
operators = []
numbers = []

//I put the number in the numbers stack
//+ (2 + 3)
operators = []
numbers = [1]
-- 
// I put the operator in the operators stack
// (2 + 3)
operators = [+]
numbers = [1]
-- 
// 2 + 3)
//find a "(" char, do nothing
operators = [+]
numbers = [1]
-- 
// + 3)
operators = [+]
numbers = [1, 2]
-- 
// 3)
operators = [+, +]
numbers = [1, 2]
-- 
// )
operators = [+, +]
numbers = [1, 2, 3]
--
//found a ")", get two items of stack of numbers (3,2), and one item of operators stack (+), result is 5, put back in the stack of numbers 
operators = [+]
numbers = [1, 5]
--
//When finished string, get two elements and one operator until finish the stack
// get two elements of numbers stack (1,5) and one of operators stack +, result is 6

我希望它能帮助你

 类似资料:
  • Evaluates simple math expression like 2*4 or 10/2 and outputs its result. You can use \ operator which is equivalent to round(a/b). 计算简单的数学表达式,比如2*4 或 10/2,并输出结果。\ 操作符结果同 round(a/b)。 Very useful in CS

  • Matplotlib 中的文本字符串都可以使用 Text Markup(一种文本标记语言)显现出来,具体的使用方法是将文本标记符放在一对美元符号 内,语法格式如下: 如果要绘制下标和上标,您需要使用 和 符号,下面是一个简单的示例: 上面代码的输出结果: Matplotlib数学表达式绘制 从上述示例可以看出,虽然数学表达式种类繁多,但是 Matplotlib 对各种数学符号都做了良好的支持。

  • 问题内容: 什么是实现将采用字符串并根据运算符优先级输出结果的python程序的最佳方法(例如:“ 4 + 3 * 5”将输出19)。我在谷歌上寻找解决这个问题的方法,但是它们都太复杂了,我正在寻找一个(相对)简单的方法。 澄清:我需要比eval()稍微先进的东西-我希望能够添加其他运算符(例如,最大运算符-4 $ 2 = 4),或者,我对此在学术上比对专业更感兴趣-我想知道 该怎么 做。 问题答

  • 8 表达式计算/求值 在计算表达式时,ffmpeg通过libavutil/eval.h接口调用内部计算器进行计算。 表达式可以包含一元运算符、运算符、常数和函数 两个表达式expr1和expr2可以组合起来成为”expr1;expr2” ,两个表达式都会被计算,但是新表达式(组合起来的)值实为表达式expr2的值。 表达式支持的二元运算符有:+,-,*,/,^ 一元运算符:+,- 以及下面的函数:

  • 问题内容: 这将返回以下错误: 我知道可以解决此问题,但是难道没有更好,更重要的是更安全的方法来评估存储在字符串中的数学表达式吗? 问题答案: 可用于解析数学表达式。特别是, 显示了如何解析基本算术表达式。下面,我将fourFn重新包装为一个数字解析器类,以便于重用。

  • 问题内容: 在Java中,我试图编写一个与数学表达式中的一个单元匹配的正则表达式,即运算符之间的内容 我的意思是,在类似1 + [1 + 2]的表达式中,正则表达式应匹配前1个,然后匹配[1 + 2]。 我所拥有的是* [([-+]?\ d +(\。\ d +)?)(\ [。+ \])] * 其中([-+]?\ d +(\。\ d +)?)应该匹配任何数字,并且 (\ [。+ \]) 应该匹配括号