Comment stocker des nombres extrêmement importants?

Par exemple, j’ai un programme factoriel qui doit sauvegarder de très grands nombres entiers pouvant contenir plus de 50 chiffres. Le type de données primitif maximum absolu en C ++ est unsigned long long int avec une valeur maximale de 18446744073709551615 qui ne 18446744073709551615 que 20 chiffres. Voici le lien vers les limites du C ++: http://www.cplusplus.com/reference/climits/

Comment puis-je stocker des nombres plus grands que cela dans une variable quelconque?

Si vous avez déjà une dépendance boost (ce que beaucoup de gens font de nos jours), vous pouvez utiliser la bibliothèque boost multi-précision . En fait, il possède déjà un exemple de programme factoriel pouvant prendre en charge une sortie allant jusqu’à 128 bits, bien que son extension ultérieure soit assez sortingviale.

Vous devrez utiliser une implémentation bigint ou bignum. Il existe des bibliothèques comme celle-ci: http://gmplib.org/

Quelques informations supplémentaires et une liste de bibliothèques: http://en.wikipedia.org/wiki/Bignum

Vous pouvez utiliser un tableau. Commencez par copier ce tableau de nombres géants, puis utilisez une virgule après 19 chiffres:

 unsigned long long int num[]= { 7316717653133062491,9225119674426574742,3553491949349698352,0,312774506326239578,3180169848018694788, 5184385861560789112,9494954595017379583,3195285320880551112,5406987471585238630,5071569329096329522, 7443043557668966489,5044524452316173185,6403098711121722383,1136222989342338030,8135336276614282806, 4444866452387493035,8907296290491560440,7723907138105158593,0,7960866701724271218,8399879790879227492, 1901699720888093776,6572733300105336788,1220235421809751254,5405947522435258490,7711670556013604839, 5864467063244157221,5539753697817977846,1740649551492908625,6932197846862248283,9722413756570560574, 9026140797296865241,4535100474821663704,8440319989000889524,3450658541227588666,8811642717147992444, 2928230863465674813,9191231628245861786,6458359124566529476,5456828489128831426,0,7690042242190226710, 5562632111110937054,4217506941658960408,0,7198403850962455444,3629812309878799272,4428490918884580156, 1660979191338754992,0,0,5240636899125607176,0,6058861164671094050,7754100225698315520,0,0, 5593572972571636269,5618826704282524836,0,0,8232575304207529634,50};