2010-01-07 3 views
2

Je travaillais sur un scénario dans lequel je devais implémenter BODMAS en Java et les opérandes pouvaient avoir jusqu'à 1000 chiffres. J'ai donc choisi de l'implémenter de la manière suivante - J'ai converti l'expression infixe (expression sur laquelle BODMAS devait être implémentée) en postfix Et puis j'ai évalué l'expression postfix en analysant chaque BigInteger qu'elle avait. J'ai réussi dans cette implémentation.Java contournement pour BigInteger

Maintenant je savoir que je ne peux pas utiliser BigInteger et doivent faire avec les types de données de base comme int, string, etc.

J'ai pensé à la façon dont cela pourrait être fait et pour être franc , n'a fait aucun progrès significatif.

Toute aide ou suggestion sur la façon dont BigInteger peut être implémenté en utilisant les types de données de base serait d'une grande aide.

+2

cela nous aiderait si vous pouviez expliquer * pourquoi * il y a la restriction contre BigInteger. Pourriez-vous simplement prendre le code source BigInteger et l'utiliser, par exemple - ou la licence est-elle trop stricte pour votre situation? –

+1

@Jon: Je suppose qu'il utilise Java ME au lieu de Java SE. – BalusC

+1

J'ai supposé quelque chose de plus proche de "l'exercice de devoirs" et j'ai répondu en conséquence. –

Répondre

2

Une manière simple d'implémenter des entiers de grande taille consiste à les stocker sous la forme d'un tableau de chiffres décimaux, par ex. 1234 pourrait être représenté par:

int[] bignum = new int[] {1, 2, 3, 4}; 

Vous devrez mettre en œuvre plus longhand, soustraction, multiplication, division, et tout ce dont vous avez besoin.

Vous pouvez constater que le stockage des numéros « inversé » pourrait être plus facile, donc stocker 1234:

int[] bignum = new int[] {4, 3, 2, 1}; 

Une implémentation plus avancée utiliserait base 2^32 ou quelque chose de beaucoup plus grand que la base 10.

2

Voici une implémentation gratuite de BigInteger de Open JDK. Il est couvert par GPL2 (est-ce un problème?)

Et même si vous ne pouvez pas copier & le coller, vous pouvez apprendre comment les bits sont stockés et manipulés dans un tableau int [].

Une alternative peut être la bibliothèque colt du CERN. Au moins, il peut gérer des champs de bits géants.

Modifier

Après avoir découvert le sens de BODMAS (pensé qu'il était un algorithme de chiffrement ou quelque chose d'autre et a dû être fait sur une JDK spéciale et limitée ;-))), je suppose que les conseils colt ne convient pas;)

Je ne supprime pas cette réponse, même si maintenant, je pense, p1NG n'a pas de restriction « juridique » contre l'utilisation (ou réimplémentant) BigInteger ...

Questions connexes