Des nombres trop grands
ivanov
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
docjeepe Messages postés 6 Statut Membre -
docjeepe Messages postés 6 Statut Membre -
salut!voilà j'ai un petit problème pour un programme:
je dois gérer les grand nombres pour 2 opérations: la multiplication et l'addition.Par exemple:
seulement voila, il y a problème: sur mon compilateur, le type "unsigned long int" fait 4 octets.
Cela signifie que je peux coder des nombres non signés de 0 à 4294967295.Moi, je veux additionner, multiplier des nombres ayant plus de 100 chiffres!!Quelqu'un pourrait m'aider??
merci d'avance.
je dois gérer les grand nombres pour 2 opérations: la multiplication et l'addition.Par exemple:
* #include <stdio.h>
* main()
* {
* char op ;
* int n1, n2 ;
* printf ("operation souhaitee, Christophe?(+ ou *)") ;
* scanf ("%c", &op);
* printf ("donnez le premier nombre");
* scanf("%ld", &n1);
* printf ("donnez le deuxieme nombre");
* scanf("%ld", &n2);
* if (op == '+') printf ("leur somme est : %ld ", n1+n2) ;
* else printf ("leur produit est : %ld ", n1*n2);
* system ("pause");
* }
seulement voila, il y a problème: sur mon compilateur, le type "unsigned long int" fait 4 octets.
Cela signifie que je peux coder des nombres non signés de 0 à 4294967295.Moi, je veux additionner, multiplier des nombres ayant plus de 100 chiffres!!Quelqu'un pourrait m'aider??
merci d'avance.
A voir également:
- Des nombres trop grands
- Code binaire des nombres - Guide
- Nombres faciles - Télécharger - Outils professionnels
- Barbara veut calculer automatiquement son budget dans un tableau. citez un des logiciels lui permettant de faire des calculs sur des tableaux de nombres (tableur). ✓ - Forum Excel
- Citez un des logiciels lui permettant de faire des calculs sur des tableaux de nombres (tableur). ✓ - Forum LibreOffice / OpenOffice
- Barre des taches trop grande - Guide
3 réponses
Une solution simple serait de faire ça avec des tableaux :
Si tu dois coder une nombre de 100 chiffres, tu fais un tableau de 100 cases de type char (1 octet).
ensuite tu fais tes calculs en parcourant les cases de tes tableaux et en ecrivant le résultat dans un tableau résultat.
Tu geres tes retenues comme au CE2, et le tour est joué !
ça n'est pas la solution optimale, mais c'est peut-etre l'une des plus simples.
voila.
Si tu dois coder une nombre de 100 chiffres, tu fais un tableau de 100 cases de type char (1 octet).
ensuite tu fais tes calculs en parcourant les cases de tes tableaux et en ecrivant le résultat dans un tableau résultat.
Tu geres tes retenues comme au CE2, et le tour est joué !
ça n'est pas la solution optimale, mais c'est peut-etre l'une des plus simples.
voila.
Re salut.
Alors il y a un pb dans ton code :
Tu dois remplacer la fonction convert par deux autres fonctions:
une pour l'addition et une pour la multiplication.
remplace la fonction convert par ces deux fonctions la :
ensuite remplace tes appels à la fonction convert par :
convertAdd pour l'addition
convertMul pour la multiplication
Voila et la ca marche mieux.
@+
Alors il y a un pb dans ton code :
Tu dois remplacer la fonction convert par deux autres fonctions:
une pour l'addition et une pour la multiplication.
remplace la fonction convert par ces deux fonctions la :
static void convertAdd (long int array[], long int val, long int a, long int b)
{
long int const base = 10;
if (val>=base)
{
/*Le % sert à faire le modulo. */
array[0] = ((a + b) / 10)%base;
array[1] = ((a + b) % base);
}
else
{
array[0] = 0;
array[1] = a + b;
}
}
static void convertMul (long int array[], long int val, long int a, long int b)
{
long int const base = 10;
if (val>=base)
{
/*Le % sert à faire le modulo. */
array[0] = ((a * b) / 10)%base;
array[1] = ((a * b) % base);
}
else
{
array[0] = 0;
array[1] = a * b;
}
}
ensuite remplace tes appels à la fonction convert par :
convertAdd pour l'addition
convertMul pour la multiplication
Voila et la ca marche mieux.
@+
et je comprends pas normalement ça devrais marcher..
/*addition et multiplication*/ #include <stdio.h> #include <stdlib.h> static long int *create(void) { return malloc (2 * sizeof(long int)); } static void convert (long int array[], long int val, long int a, long int b) { long int const base = 10; if (val>=base) { a = ((a + b) - base); b = 1; array[0] = b; array[1] = a; } else { array[0] = 0; array[1] = a + b; } } static long int *add (long int a, long int b) { long int *const p = create (); if (p!= NULL) { long int const val = (a + b); convert (p, val, a, b); } return p; } static long int *mul (long int a, long int b) { long int *const p = create(); if (p!= NULL) { long int const val = (a * b); convert (p, val, a, b); } return p; } static void onexit (void) { system ("pause"); } int main (void) { int ret = EXIT_SUCCESS; char buf[256]; int op; atexit (onexit); printf ("operation souhaitee (+ ou *)?\n"); for(;;) { fgets (buf, sizeof buf, stdin); op = buf[0]; if (op == '+' || op =='*') { break; } } printf ("donnez le premier nombre\n"); if (fgets (buf, sizeof (buf), stdin) != NULL) { long int a = strtol (buf, NULL, 10); printf ("donnez le deuxieme nombre\n"); if (fgets (buf, sizeof (buf), stdin) != NULL) { long int b = strtol (buf, NULL, 10); long int *p = NULL; switch (op) { case'*': p = mul (a,b); break; case'+': p = add(a,b); break; default: printf("Erreur bizarre\n"); ret = EXIT_FAILURE; } if(p != NULL) { printf("le nombre est [%ld][%ld] en base 10\n", p[0], p[1]); free (p), p = NULL; } } else { ret = EXIT_FAILURE; } } else { ret = EXIT_FAILURE; } return ret; }voila...mais je ne comprends pas.Dès que je choisis de passer à des nombres supèrieurs à 10...marche pas.Je ne vois pas mon erreur.si quelqu'un peut m'aider..ça serait sympa.je galère sur ce truc depuis 3 semaines!