Gérer de grands nombres en C ++?
Quelle est la meilleure façon de traiter les grandes entrées numériques en C++ (par exemple 10^100
)?
Pour les algorithmes j'ai l'habitude de passer de l'un à ruby et j'ai parfois l'utilisation de chaînes de caractères.
Autres bonnes méthodes?
source d'informationauteur kasperasky
Vous devez vous connecter pour publier un commentaire.
Il semble que vous êtes à la recherche d'un moyen pour entrer en Précision Arbitraire des nombres.
voici deux bibliothèques, vous pouvez utiliser: GMP et MAPM
Découvrez de L'Entier de l'Étude de Cas en C++.pdf par Owen Astrachan. J'ai trouvé ce fichier très utile avec des détails d'introduction et de mise en œuvre du code. Il n'utilise pas du tout de la 3e partie de la bibliothèque. J'ai utilisé cette option pour gérer les grands nombres (tant que vous avez suffisamment de mémoire pour stocker
vector<char>
) sans problèmes.Idée:
Il met en œuvre une précision arbitraire classe integer par le stockage de gros int dans un
vector<char>
.Puis toutes les opérations liées à la grande int, y compris
<<, >>, +, -, *, ==, <, !=, >, etc.
peut être fait sur la base d'opérations sur cettechar array
.Goût du code:
Voici le fichier d'en-tête, vous pouvez trouver sa rpc avec les codes dans le fichier pdf.
Vous êtes à la recherche pour savoir comment effectuer des opérations sur les grandes entrées que vous recevez? Il y a un grand entier C++ bibliothèque (similaire à Java) vous permettant d'effectuer des opérations arithmétiques...
Si vous voulez faire votre propre code dans le but d'essayer à l'aide de cordes pour stocker de grands nombres... vous pouvez ensuite créer des ops de+ - /*..., par exemple -
en supposant que vous parlez de la saisie de nombres, de la double précision, vous obtiendrez jusqu'à 1.7976931348623157 x 10^308
Vous pouvez avoir un coup d'oeil à gmplibune précision arbitraire la gestion des numéros de bibliothèque pour le C et le C++
Si vous voulez être précis, vous avez besoin d'une bibliothèque pour traiter de grands nombres. Java a BigInt qui seront toujours exactes, peu importe combien de chiffres que vous voulez le prendre, et fournit des opérations mathématiques sur eux. Tout le code source est inclus, vous pouvez les transférer, mais ce n'est vraiment pas le genre de chose C++ est mieux à--je voudrais utiliser une JVM en fonction de la langue et de l'utilisation de l'une des Grandes bibliothèques.
Je ne pense pas que j'utiliserais ruby pour cela, à moins que vous vouliez qu'il soit lent, et je pars du principe que puisque vous parlez de C++, la vitesse est en quelque sorte un facteur de conception.
Comme d'autres l'ont déjà souligné, il existe différents bignum/précision arbitraire des bibliothèques en C++ qui vous serait probablement utile. Si la vitesse n'est pas nécessaire, je suis sous l'impression que Python et Lisp à la fois l'utilisation bignums par défaut.
Eh bien, je pense que la meilleure façon de faire de tels calculs arithmétiques en utilisant des chaînes de caractères. Donner l'entrée comme arguments de ligne de commande, puis de les manipuler en toute logique en utilisant les fonctions de chaîne comme
atoi()
etitoa()
! Mais, hey, cela peut-il être fait de la multiplication et de Division? Je pense que de cette façonstrlen
de chaînes de caractères entrés n'a pas d'importance pour la programmation pour le compilateur jusqu'à ce que la logique est bien.