Voici un petit exemple avec quelques calculs sur des entiers multi-précision.
#include<gmp.h> #include<stdio.h> /* Place la factorielle de n dans res. res doit etre initialise */ void factorielle(long n, mpz_t res) { mpz_t temp; if (n == 0) { mpz_set_ui(res, 1); } else { mpz_init(temp); factorielle(n-1, temp); mpz_mul_si(res, temp , n); mpz_clear(temp); } } /* Place b^n dans res. res doit etre initialise */ void puissance(long b, long n, mpz_t res) { mpz_t temp; if (n == 0) { mpz_set_ui(res, 1); } else { mpz_init(temp); puissance(b, n-1, temp); mpz_mul_ui(res, temp, b); mpz_clear(temp); } } /* Affiche les 100 premieres puissances de 10. */ int main() { mpz_t i; long ind; mpz_init(i); for(ind = 0 ; ind <= 100 ; ind++) { puissance(10, ind, i); mpz_out_str(NULL, 10, i); printf("\n"); } mpz_clear(i); return 0; }
Et voici, pour vous éviter de vous prendre la tête, le makefile.
all : testGMP.c gcc -Wall -lgmp testGMP.c run: all ./a.out