Conversion (chiffres en lettres)

salut , svp je cherche un programme en c qui permet de convertir un nombre compris entre 0 et 99 999 999 999 en lettres .
j'ai enormement besoin de votre aide
Merci d'avance

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. dzl ça diffère completement du c , voilà j'ai un prog en c mais je l'ai pas bien compris :#include<stdio.h>

    //--------------------------------------------------------------------
    // Conversion d'un nombre de 3 chiffres en lettres
    //--------------------------------------------------------------------
    void Nombre3EnLettres(int n3, int cardinal)
    {
    static char *unite[] =
    {
    "", "UN ", "DEUX ", "TROIS ", "QUATRE ",
    "CINQ ", "SIX ", "SEPT ", "HUIT ", "NEUF ",
    "DIX ", "ONZE ", "DOUZE ", "TREIZE ", "QUATORZE ",
    "QUINZE ", "SEIZE ", "DIX-SEPT ", "DIX-HUIT ", "DIX-NEUF "
    };

    static char *dizaine[] =
    {
    "", "", "VINGT", "TRENTE", "QUARANTE", "CINQUANTE",
    "SOIXANTE", "SOIXANTE-DIX", "QUATRE-VINGT", "QUATRE-VINGT-DIX"
    };

    int nb_centaine = n3 / 100;
    int nb_dizaine = (n3 - (nb_centaine * 100)) / 10;
    int nb_unite = n3 - nb_centaine * 100 - nb_dizaine * 10;

    if(nb_centaine > 0)
    {
    if(nb_centaine > 1)
    printf("%s", unite[nb_centaine]);
    if(cardinal || nb_dizaine || nb_unite || (nb_centaine == 1))
    printf("CENT ");
    else
    printf("CENTS ");
    }

    switch(nb_dizaine)
    {
    case 0:
    printf("%s", unite[nb_unite]);
    break;

    case 1:
    printf("%s", unite[nb_unite + 10]);
    break;

    case 7:
    printf("%s", dizaine[6]);
    if(nb_unite == 1)
    printf(" ET ");
    else
    printf("-");

    printf("%s", unite[nb_unite + 10]);
    break;

    case 8:
    printf("%s", dizaine[8]);
    if(nb_unite == 0)
    if(cardinal)
    printf(" ");
    else
    printf("S ");
    else
    printf("-");

    printf("%s", unite[nb_unite]);
    break;

    case 9:
    printf("%s-%s", dizaine[8], unite[nb_unite + 10]);
    break;

    default:
    printf("%s", dizaine[nb_dizaine]);
    if(nb_unite == 0)
    printf(" ");
    if(nb_unite == 1)
    printf(" ET ");
    if(nb_unite > 1)
    printf("-");

    printf("%s", unite[nb_unite]);
    break;
    }
    }

    //--------------------------------------------------------------------
    // Conversion d'un nombre en lettres [1 -> 999999999]
    //--------------------------------------------------------------------
    void NombreEnLettres(long n)
    {
    int nb_million, nb_millier, nb_unite;

    if(n < 1e9)
    {
    nb_million = n / 1e6;
    nb_millier = (n - (nb_million * 1e6)) / 1e3;
    nb_unite = n - nb_million * 1e6 - nb_millier * 1e3;

    Nombre3EnLettres(nb_million, 0);

    switch(nb_million)
    {
    case 0: break;
    case 1: printf("MILLION "); break;
    default: printf("MILLIONS "); break;
    }

    switch(nb_millier)
    {
    case 0: break;
    case 1: printf("MILLE "); break;
    default:
    Nombre3EnLettres(nb_millier, 1);
    printf("MILLE ");
    break;
    }

    Nombre3EnLettres(nb_unite, 0);
    }
    else
    printf("Nombre trop grand !");
    }

    //--------------------------------------------------------------------
    int main(void)
    {
    long n = 0;

    do
    {
    printf("\nEntrez un nombre [1->999999999] [0 pour quitter]: ");
    scanf("%ld", &n);
    printf("\n");
    NombreEnLettres(n);
    printf("\n");
    }
    while(n != 0);

    return 0;
    }
    si vous pouvez m'aider à le comprendre n'hezitez pas
    J'ai enormement besoin de votre aide
    1. Re, pocaontace,

      Désolé aussi, mais je ne pratique pas couramment le C.
      Ajx.
  2. tu peux télécharger une macro qui permettra la conversion des nombres en lettres.

    http://perso.orange.fr/gerard.g/logi/excel/excel.htm