2009-12-25 3 views
0

Im travaillant sur un problème qui va comme ceci -affectation BODMAS

Mettre en œuvre une fonction qui permet d'évaluer une expression constituée de opérandes suivants: '(', ')', '+', '-', « * ','/'. Chaque nombre dans l'expression peut être grand (aussi grand que représenté par une chaîne de 1000 chiffres). L'opérande '/' (c'est-à-dire diviser) renvoie le quotient entier .

Les cas de test vont comme -

(((100000000000000000000000/ 1111111111234623874627) * 2342384523 + 123124 - 34534534) * ( 1231263123242346 + 223423234346 * 234236536))

et pourrait être encore plus.

Je ne souhaite pas utiliser de bibliothèques externes qui sont des évaluateurs/analyseurs d'expression tels que JEP et similaires. Je pensais dans le sens de BigInteger, puis j'ai appris que BigIntegers n'évaluait pas les epressions comme Integer le fait. Je sais aussi que l'analyse syntaxique est une option dans laquelle je devrais simuler le comportement de BODMAS. Je voudrais savoir s'il y a une autre façon d'y arriver et s'il n'y en a pas, j'aimerais avoir quelques indications sur la façon dont je pourrais l'implémenter .

Je ne suis pas à la recherche d'une solution prête à l'emploi, je cherche simplement des directions pour arriver à la solution par moi-même.

+1

Quel est le problème avec BigInteger? Le doc dit: BigInteger fournit des analogues à tous les opérateurs entiers primitifs de Java, et toutes les méthodes pertinentes de java.lang – codaddict

Répondre

0

Vous pouvez implémenter ceci comme finite state machine puis l'implémenter en utilisant le state pattern. Je ne trouve malheureusement aucun exemple de machine à états BODMAS, mais ils doivent être là quelque part.

1

Vous pouvez créer un recursive descent parser pour évaluer l'expression et utiliser StringTokenizer comme une lexe de spimple pour séparer la ligne. Vous pouvez utiliser delim = "()/*-+" et returnDelims = true. Cela retournera les nombres et les délimiteurs dans votre cas sont les opérateurs et les parenthèses que vous devez évaluer.