0

我正在解决这样的问题 -

实现一个计算由以下操作数组成的表达式的函数:'(', ')', '+', '-', '*', '/'。表达式中的每个数字都可能很大(大到由 1000 位数字的字符串表示)。'/'(即除法)操作数返回整数商。

测试用例就像 -

(((((((10000000000000000000000000012312344444485634654654343434723854278423 /11111111111111111234623874627) * 2342384523 + 123124

并且可能更长。

我不想使用像 JEP 之类的表达式评估器/解析器的外部库。

我一直在思考 BigInteger 的思路,然后才知道 BigIntegers 不像 Integers 那样评估 epressions。我也知道解析是一个选项,我必须在其中模拟 BODMAS 行为。我想知道是否有任何其他方法可以解决这个问题,如果没有,想要一些关于如何实现这个的指针.

我不是在寻找现成的解决方案,只是在寻找自己找到解决方案的方向。

4

2 回答 2

1

您可以创建一个递归下降解析器来评估表达式并使用StringTokenizer作为一个 spimple lexer 来拆分行。您可以使用delim = "()/*-+"returnDelims = true。这将返回在您的情况下是您需要评估的运算符和括号的数字和分隔符。

于 2009-12-25T11:50:34.917 回答
0

您可以将其实现为有限状态机,然后使用状态模式实现它。不幸的是,我找不到任何 BODMAS 状态机的例子,但它们一定在某个地方。

于 2009-12-25T10:15:24.387 回答