Factorielle sur de grands entiers : erreur de segmentation
Bonjour,
j'ai un projet de C qui consiste à faire des calculs sur de grands entier (au delà de 64bits), les opérations à implémenter sont *,/,+,-,! et c'est sur la factorielle que je rencontre des problèmes (multiplication & soustrait fonctionnentnt), elle fonctionne jusqu'à !99 mais me génère une erreur de segementation à partir de !100.
Voici ma fonction factorielle:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| bigint factorielle(bigint);
bigint factorielle(bigint nb1)
{
bigint tmp,resultat,sous;
tmp=(bigint)malloc(sizeof(struct biginteger));
tmp=nb1;
resultat=(bigint)malloc(sizeof(struct biginteger));
resultat->digits=(char *)malloc(1000);
resultat=nb1;
//bigint de valeur 1 qui servira à décrémenter nb1
sous=(bigint)malloc(sizeof(struct biginteger));
sous->taille=1;
sous->digits[0]='1';
//tant que tmp ne vaut pas 1
while(tmp->taille!=1 || tmp->digits[0]!='1')
{
//On le décrémente et on le multiplie par le résultat précédent
tmp=soustrait(tmp,sous);
trim(&tmp);
resultat=multiplication(resultat,tmp);
}
return resultat;
} |
Et ma stucture bigint, digits est un pointeur de caractère permettant d'implémenter mon entier.
Code:
1 2 3 4 5 6 7
| struct biginteger {
char * digits;
int taille;
char signe;
};
typedef struct biginteger * bigint; |
Quelqu'un aurait une idée du problème ??? Merci d'avance