9
votes

Comment ajouter 2 entiers de taille arbitraire en C ++?

Je voudrais ajouter 2 entiers de taille arbitraire en C ++. Comment puis-je faire ça?


5 commentaires

Veuillez indiquer plus d'informations .. est une coulée possible?


Vous pouvez consulter GMP , une bibliothèque arithmétique de précision arbitraire pour C et C ++.


Quelque chose comme libgmp fera des arithmétiques de précision arbitraire.


L'ajout est généralement assez facile pour la plupart des implémentations d'entiers de taille arbitraire. Vous les ajoutez simplement que le membre par membre commençant à l'extrémité de la commande basse, en ajoutant dans n'importe quel point de vue de l'étape précédente et en calculant la réalisation. Tout comme vous avez appris à l'école primaire.


Par défaut C ++ n'a pas d'entiers de taille arbitraire, mais il existe de nombreuses bibliothèques tierces. Si vous magasinez toujours pour une bibliothèque, considérez-vous également.


3 Réponses :


4
votes

Utilisation de l'opérateur +


0 commentaires

15
votes

Voici un exemple montrant comment utiliser OpenSSL Bignum mise en œuvre pour arbitraire- Arithmétique de précision. Mon exemple fait 2 64 sup> + 2 65 sup>. J'utilise Linux.

g++ bignum.cpp -o bignum -I./openssl-1.0.0/include ./openssl-1.0.0/libcrypto.a


4 commentaires

Quel est le but de la variable CTX dans votre exemple. Il semble que cela ne soit jamais utilisé?


@Madogre: bonne observation. Il s'avère que vous n'avez pas besoin d'un contexte pour bn_add , il reste donc inutilisé dans cet exemple. D'autres opérations mathématiques l'exigent, comme bn_mul , bn_div , bn_mod , et ainsi de suite. OpenSSL utilise le contexte pour la comptabilité interne.


Depuis que vous utilisez le compilateur GNU, je n'utiliserais pas ce genre de chose pour un tel nombre, car il existe un type intégré pour un entier de 128 bits dans votre cas.


Merci pour cet exemple. Avec quelques modifications mineures, j'ai été capable de compiler ce code également dans ANSI C comme GCC Test.c -O Test -Wall -Lcrypto -Si -Si -Si -WePittic -Wextra .



4
votes

Je voudrais ajouter 2 entiers de taille arbitraire en C ++. Comment puis-je faire ça? P>

Si vous voulez effectuer vous-même les mathématiques multi-précision, alors je vous suggère de jeter un coup d'œil à Donald Knuth's Art de la programmation informatique . Je crois que le volume II, des algorithmes séminumériques, le chapitre 4, la précision multiple arithmétique, est ce que vous êtes intéressé. Knuth vous donne tous les détails de Gory. P>

Manipulation de grands nombres en C ++? fournit également une référence à un papier intéressant. Vous devriez probablement le lire si vous lancez votre propre implémentation. (D'autres questions similaires manquent de référence. Merci à @herohuyongtao pour lui fournir). P>

En plus de @indiv Réponse d'utilisation OpenSSL en C, vous pouvez utiliser botan ou Crypto ++ . Les bibliothèques C ++ sont toutes deux, et les deux sont à peu près aussi vieux que OpenSSL. Les réponses surprises ne sont pas fournies pour qu'ils envisageant que votre question soit étiquetée C ++. P>

si vous avez C ++ 11 ou unique_ptr code>, vous pouvez les utiliser pour l'OpenSSL C code. unique_ptr code> vraiment des rangements les choses up. Un exemple est donné ci-dessous. P>


Botan H2>

Voici le programme: p> xxx pré>

et bâtiment de l'annuaire de la bibliothèque (Experciosité): P>

$  g++ -I ./include test.cxx ./libcrypto.a -o test.exe -ldl -pthread
$ ./test.exe
55340232221128654848
0x30000000000000000


0 commentaires