/*----------------------------------------------------------*/ /* */ /* AUTHOR : Eric VIOLARD */ /* E-MAIL : violard@icps.u-strasbg.fr */ /* ORGANISM : Université Louis Pasteur (Strasbourg) */ /* CREATION : 23/11/02 */ /* */ /* ---------------------------------------------------------*/ #include /* pour utiliser les fonctions printf et scanf */ /* --- Définition du type des grands entiers --- */ #define MAX_NB_CHIFFRES 1000 typedef struct { int chiffre[MAX_NB_CHIFFRES]; } grand_entier; /* on représente un grand entier par un tableau */ /* on englobe le tableau dans une structure pour permettre de définir en C des fonctions dont le résultat est de type grand_entier */ /* Chaque élément du tableau "chiffre" contient un chiffre du grand entier. Les chiffres sont stockés dans le tableau de la manière suivante : chiffre[0] contient le chiffre des unités chiffre[1] contient le chiffre des dizaines chiffre[2] contient le chiffre des centaines chiffre[3] contient le chiffre des milliers etc. et on complète par des 0 (par exemple, pour les entiers strictement inférieurs à 10000, pour tous les indices i, tels que 3 < i < MAX_NB_CHIFFRES, chiffre[i] vaut 0) */ /* les grand entiers sont munis des opérations suivantes : - construction d'un grand entier (de type grand_entier) à partir d'un entier (de type int) - nombre de chiffres d'un grand entier - lecture d'un grand entier - écriture d'un grand entier - addition de 2 grands entiers - multiplication de 2 grands entiers */ grand_entier cons_grand_entier(int n); /* conversion d'une valeur de type int en une valeur de type grand_entier */ int nb_chiffres(grand_entier N); /* nombre de chiffres d'un grand entier */ grand_entier lecture_grand_entier(); /* lecture d'un grand entier sur l'entrée standard */ void ecriture_grand_entier(grand_entier N); /* écriture d'un grand entier sur la sortie standard */ grand_entier somme_grand_entier(grand_entier N1,grand_entier N2); /* addition de 2 grands entiers N1 et N2 */ /* pré-conditions : nb_chiffres(N1)+1 < MAX_NB_CHIFFRES && nb_chiffres(N2)+1 < MAX_NB_CHIFFRES */ grand_entier multiple_grand_entier(grand_entier N,int k); /* multiplication d'un grand entier N par un chiffre k */ /* pré-conditions : 0 <= k <= 9 et nb_chiffres(N)+1 < MAX_NB_CHIFFRES */ grand_entier puissance10_grand_entier(grand_entier N,int p); /* calcul de N multiplié par (10 puissance p) */ /* pré-conditions : nb_chiffres(N)+p < MAX_NB_CHIFFRES */ grand_entier produit_grand_entier(grand_entier N1,grand_entier N2); /* produit de 2 grands entiers N1 et N2 */ /* pré-conditions : nb_chiffres(N1)+nb_chiffres(N2) < MAX_NB_CHIFFRES */