#include int pgcd(int a, int b) { return b? pgcd(b,a%b) :a; } int fact(int n) { return n<=1? 1 :n*fact(n-1); } int fibo(int n) { return n<=1? 1 : fibo(n-1)+fibo(n-2); } void libelle(unsigned a) { const static char unite[20][20]={"zero ","un ","deux ","trois ","quatre ","cinq ","six ","sept ","huit ","neuf ", "dix ","onze ","douze ","treize ","quatorze ","quinze ","seize ","dix-sept ","dix-huit ","dix-neuf "}, dizaine[10][20]={"","dix ","vingt ","trente ","quarante ","cinquante ","soixante ","septante ","octante ","nonante "}; if(a<20) printf(unite[a]); else if(a<100) printf(dizaine[a/10]), libelle(a%10); else if(a<200) printf("cent "), libelle(a-100); else if(a<1000) libelle(a/100), printf("cent "), libelle(a%100); else if(a<2000) printf("mille "), libelle(a-1000); else if(a<1000000) libelle(a/1000), printf("mille "), libelle(a%1000); else if(a<1000000000) libelle(a/1000000), printf("million "), libelle(a%1000000); else libelle(a/1000000000), printf("milliard "), libelle(a%1000000000); } int libell(unsigned a,int e) { const static char unite[20][20]={""," un"," deux"," trois"," quatre"," cinq"," six"," sept"," huit"," neuf", " dix"," onze"," douze"," treize"," quatorze"," quinze"," seize"," dix-sept"," dix-huit"," dix-neuf"}, dizaine[10][20]={""," dix"," vingt"," trente"," quarante"," cinquante"," soixante",""," quatre-vingt",""}; if(!a) return e; if(a<20) return printf(unite[a]),0; if(a<100) { unsigned d=a/10; d-=d==7 || d==9; printf(dizaine[d]); if(a%10==1 && a<80) printf(" et"); return libell(a-d*10,d==8); } return a<200? printf(" cent"), libell(a-100,0) : a<1000? libell(a/100,0), printf(" cent"), libell(a%100,1) : a<2000? printf(" mille"), libell(a-1000,0) : a<1000000? libell(a/1000,0), printf(" mille"), libell(a%1000,0) : a<1000000000? libell(a/1000000,0), printf(" million"), printf(a>=2000000?"s":""), libell(a%1000000,0) : (libell(a/1000000000,0), printf(" milliard"), printf(a>=2000000000?"s":""), libell(a%1000000000,0)); } void libelle2(unsigned a) { if(libell(a,1)) printf(a?"s":" zero"); } int main() { int i=2013456780, j=12345678; for(;i;i=i/2+j,j=j*2/3) libelle(i), printf("\n"), libelle2(i), printf("\npgcd(%d,%d)=%d\n",i,j,pgcd(i,j)); for(i=1;i<10;i++) printf("%d!=%d %d\n",i,fact(i),fibo(i)); return 0; }