#include<stdio.h> #define BASE 27 /************************************************/ /* Retourne le rang de la lettre a dans l'alphabet. 'a' est de rang 1, 'b' de rang 2, etc. */ char rankOfLetter(char a) { return a - 'a' + 1; } /************************************************/ /* Retourne la lettre de rang r dans l'alphabet. */ char letterOfRank(char r) { return r + 'a' - 1; } /************************************************/ /* Convertit le nombre nb en base 27, place les lettres calculees dans la chaine c. (ne pas oublier le 0 a la fin de c...) */ void base27Of10(char* c, unsigned long nb) { if (nb == 0) { *c = 0; } else { *c = letterOfRank(nb%BASE); base27Of10(c + 1, nb / BASE); } } /************************************************/ /* Convertit en base 10 le message contenu dans c. */ unsigned long base10Of27(char* c) { if (*c == 0) return 0; return rankOfLetter(*c) + BASE*base10Of27(c + 1); } /************************************************/ /* Convertit en base 10 le mot "abcdfg", puis le reconvertit de nouveau en base 27. */ int main(int argc, char** argv) { char /*c[7] = "abcdfg",*/ d[700]; unsigned long b10 = base10Of27(argv[1]); printf("%lu\n", b10); base27Of10(d, b10); printf("%s\n", d); return 0; }