mamiemando
19551Messages postés
12 mai 2005Date d'inscription
ModérateurStatut
14 février 2012Dernière intervention
7 juil. 2009 à 19:31
Pour moi 998 ne serait pas IIM mais plutôt CMXCVIII (confirmé par l'exemple 1 975 = MCMLXXV sur wikipedia)
Une puissance de 10 ne peut être précédée que d'un nombre strictement plus grand ou de la puissance 10 immédiatement inférieure.
Du coup le programme est assez trivial. Tu écris ton entier dans une chaîne de caractère (par exemple avec un sprintf) et tu regardes la longueur de la chaîne pour en déduire la plus grande puissance de 10. Ensuite tu lis un par un les caractères de cette chaîne et tu les repasses en entier avec la fonction atoi.
Tu appelles une fonction confectionnée par tes soins prenant en paramètre
- unsigned puis: la puissance de 10 courante,
- unsigned val: la valeur obtenue par atoi (valeur comprise entre 0 et 9)
- char *buf: un pointeur vers un buffer dans lequel tu vas écrire la valeur romaine
L'idéal serait que cette fonction manipule un tableau dans lequel sont référencées les puissances de 10 (par exemple {'I','X','C','M'}). Selon la valeur de puis, il est facile de récupérer les bons caractères romains. Ensuite tu fais un switch case sur val et tu écris dans ton buffer à coup de sprintf.
Bonne chance