Il est usuel lors de chiffrements de convertir les messages en nombres. Un message "abcdfg" peut se représenter par la suite de nombres " ". Vous remarquez que l'on numérote les lettres à partir de de sorte qu'un message puisse être représenté par un nombre en base sans que des apparaissent dans sa représentation. La formule générale permettant de calculer la valeur en base d'un nombre représenté en base s'obtient en multipliant les chiffres par des puissances successives de . Par exemple : . Ce qui se réécrit . Le message "abcdfg" correspond donc à la valeur en base . On simplifie les algorithmes de conversion en inversant l'ordre des lettres, donc en calculant . On effectue la conversion vers la base en effectuant des division successives par . On retrouve le premier chiffre en calculant . On divise ensuite par et on procède de même pour obtenir les chiffres suivants. On a donc , le deuxième chiffre est . On continue : , le troisième chiffre est donc ... On s'arrête que le nombre à convertir est nul.
#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 0; } /************************************************/ /* Retourne la lettre de rang r dans l'alphabet. */ char letterOfRank(char r) { return 0; } /************************************************/ /* 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) { } /************************************************/ /* Convertit en base 10 le message contenu dans c. */ unsigned long base10Of27(char* c) { return 0; } /************************************************/ /* Convertit en base 10 le mot "abcdfg", puis le reconvertit de nouveau en base 27. */ int main() { char c[7] = "abcdfg", d[7]; unsigned long b10 = base10Of27(c); printf("%lu\n", b10); base27Of10(d, b10); printf("%s\n", d); return 0; }