0

私はこのような問題に取り組んでいます -

次のオペランドで構成される式を評価する関数を実装します: '(', ')', '+', '-', '*', '/'. 式の各数値は大きくなる可能性があります (1000 桁の文字列で表される大きさ)。'/' (つまり、除算) オペランドは、整数の商を返します。

テストケースは次のようになります-

((100000000000000000000000000001231234448563465435434723854278423 /111111111234623874627)

さらに長くなる可能性があります。

JEP などの式評価/パーサーである外部ライブラリを使用したくありません。

私は BigInteger に沿って考えていましたが、BigInteger は Integers のように式を評価しないことを知りました。また、解析は、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 に答える