Multiplication des grands nombres.

Signaler
Messages postés
5
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
16 mai 2004
-
Messages postés
5
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
16 mai 2004
-
Salut @ tous !!!

Je suis debutant en C, et je voudrais pouvoir multiplier deux "grands" nombres de plus de dix chiffres en base 10.

Je pensais donc mettre les 2 nombres dans 2 tableaux, tels que par exemple, pour A=156 et B=589, T1={1,5,6} et T2={5,8,9}.

Mon premier problème se pose. Je ne sais pas trop comment faire en sorte que le contenu des tableaux soit des entier et non des caractères.
Je voudait donc convertir des tableaux, qui au depart sont des chaines de caractères, en tableaux d'entiers, pour que dans T1 : 1, 5, 6 soient bien des entiers.

Après ça, je ne sait pas coment faire la multiplication des deux tableaux cases par cases afin d'obtenir le resultat de la multiplication de A*B, dans un troisième tableau.

Si vous pouviez maider en m'expliquant clairement, ce serait super sympa.
Merci d'avance. :)

15 réponses

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
aller te casse pas la tet, je pense que __int64 devrait te suffir :big)
Messages postés
5
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
16 mai 2004

Merci pour t'as réponse, super rapide !
Mais, euh... tu pourrait etre un peu plus clair :big) ?
Je debute et j'ai pas bien compris.
C'est une fonction ? On peut aller jusqu'a des nombres (presque) infinis ?
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
c'est un type tout simplement, utilise le comme un int, sauf que au niveau de la limite tu peu aller 4 milliard de fois plus loin
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
__int64 ne va 'que' jusqu'à 2^64 et finalement ce n'est pas énorme
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
oui, seulement :

18 446 744 073 709 551 616

soit jusqu'a 20 chiffre max, J_r_m parlait de l'ordre de 10 chiffres, donc ca devarit lui suffir, non?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
23
__m128 pour utiliser SSE2.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
5
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
16 mai 2004

Bah en fait non, car c'est 10 chiffres minimum. Ca peut donc aller jusqu'a l'infini.
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
a jusqu'a l'infini, en c je sais pas, en c++ ya des classes pour geré les grand nombre

regarde du coté de __m128 comme suggere BruNews
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
bon allez tu peu allez voir dans mes sources, la classe CInteger devrait faire ton bonheur
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Dans ma source sur la génération de grand nombre premier il y a également une classe BigInt.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
23
Allez va bon, vous ferez son bonheur tous les 2, pas de jaloux.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
5
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
16 mai 2004

Merci, mais, dsl de dire ça, je voudrais pas etre chiant.
En fait, c'est un programme que je dois faire pour l'ecole, et donc je pe pas me servir de choses comment "__m128", car sinon je respecte pas la consigne.
Alors si vous pouviez me donner des astuces ou des morceaux de sources que je pourrait utiliser facilment pour ce que j'ai a faire ce serait sympa (pke ce que vous m'avez donné, comme BigInt,.. je c pas comment les utiliser).

Pour l'instant g commencé a ecrire le programme, et ça devrait pouvoir convertir un tableu de caractères en un tableau d'entiers (mais je suis sur que c bouré de fautes, et que je m'y prends mal) :

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

main()
{
int i,j;
int *tab;
long nb;
char *T2,**p;
char *T1;
scanf("%d",T1);
T2 = (char *) malloc (10000 * sizeof(char));
for(i=0,j=0;i=strlen(T1)/4;i++,j=j+4)
{
strncpy(T2,&T1[j],4); // je divise la chaine de caractères en paquets de chaines de 4 caractères
T2[j+4]='\0';
nb=strtol(T2,p,10); // je transforme chaque paquet en long
tab[j+3]=nb%10; // je place chaque chiffre de chaque nombre dans chaque case d'un tableau
tab[j+2]=((nb)%100)/10;
tab[j+1]=((nb)%1000)/100;
tab[j]=((nb)%10000)/1000;
}
system("pause");
}
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
char *T1;
scanf("%d",T1);

=> faut allouer T1 avec malloc ou décalrer un tableau.
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
%d lit un entier, pour une chaîne c'est %s
Messages postés
5
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
16 mai 2004

Ok, merci je corrige tt de suite !!