Multiplication des grands nombres.

J_r_m Messages postés 5 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 16 mai 2004 - 16 mai 2004 à 18:09
J_r_m Messages postés 5 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 16 mai 2004 - 16 mai 2004 à 23:42
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

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
16 mai 2004 à 18:59
aller te casse pas la tet, je pense que __int64 devrait te suffir :big)
0
J_r_m Messages postés 5 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 16 mai 2004
16 mai 2004 à 19:15
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 ?
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
16 mai 2004 à 19:27
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 mai 2004 à 19:37
__int64 ne va 'que' jusqu'à 2^64 et finalement ce n'est pas énorme
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
16 mai 2004 à 19:44
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?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 mai 2004 à 19:44
__m128 pour utiliser SSE2.

ciao...
BruNews, Admin CS, MVP Visual C++
0
J_r_m Messages postés 5 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 16 mai 2004
16 mai 2004 à 19:55
Bah en fait non, car c'est 10 chiffres minimum. Ca peut donc aller jusqu'a l'infini.
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
16 mai 2004 à 20:08
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 mai 2004 à 20:14
bon allez tu peu allez voir dans mes sources, la classe CInteger devrait faire ton bonheur
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
16 mai 2004 à 23:16
Dans ma source sur la génération de grand nombre premier il y a également une classe BigInt.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 mai 2004 à 23:20
Allez va bon, vous ferez son bonheur tous les 2, pas de jaloux.

ciao...
BruNews, Admin CS, MVP Visual C++
0
J_r_m Messages postés 5 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 16 mai 2004
16 mai 2004 à 23:30
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");
}
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
16 mai 2004 à 23:40
char *T1;
scanf("%d",T1);

=> faut allouer T1 avec malloc ou décalrer un tableau.
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
16 mai 2004 à 23:41
%d lit un entier, pour une chaîne c'est %s
0
J_r_m Messages postés 5 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 16 mai 2004
16 mai 2004 à 23:42
Ok, merci je corrige tt de suite !!
0
Rejoignez-nous