• Lenguaje

    C

  • Descripción

    Pide un número entero y muestra su valor en letra

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <stdio.h>
#include <stdlib.h>

void unidades_en_letra (unsigned long cantidad);
void millares_en_letra (unsigned long cantidad);
void millones_en_letra (unsigned long cantidad);

int main (void)
{
    long cantidad;
    printf ("Ingrese una cantidad: ");
    scanf ("%ld", &cantidad);
    putchar ('\n');
    if (cantidad < 0)
    {
        printf ("menos ");
        cantidad = -cantidad;
    }
    if (cantidad==0)
        printf ("cero");
    else
        millones_en_letra (cantidad);
    printf ("\n\n");
    system ("pause");
    return EXIT_SUCCESS;
}

const char *unidades[] = {NULL, "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve"};
const char *decimas[]  = {NULL, "diez", "veinte", "treinta", "cuarenta", "cincuenta", "sesenta", "setenta", "ochenta", "noventa"};
const char *diez_y[]   = {NULL, "once", "doce", "trece", "catorce", "quince"};
const char *centenas[] = {NULL, "ciento", NULL, NULL, NULL, "quinientos", NULL, "setecientos", NULL, "novecientos"};

void unidades_en_letra (unsigned long cantidad)
{
    unsigned unidad  = (unsigned) cantidad % 10;
    unsigned decima  = (unsigned) (cantidad / 10) % 10;
    unsigned centena = (unsigned) (cantidad / 100) % 10;
    if (centena!=0)
    {
        if (centenas[centena]==NULL)
            printf ("%scientos", unidades[centena]);
        else if (centena!=1 || unidad!=0 || decima!=0)
            printf ("%s", centenas[centena]);
        else
            printf ("cien");
    }
    if (unidad!=0 || decima!=0)
    {
        if (centena!=0)
            printf (" ");
        if (decima==0)
            printf ("%s", unidades[unidad]);
        else if (unidad==0)
            printf ("%s", decimas[decima]);
        else if (decima==1 && unidad>=1 && unidad<=5)
            printf ("%s", diez_y[unidad]);
        else if (decima==1)
            printf ("dieci%s", unidades[unidad]);
        else if (decima==2)
            printf ("veinti%s", unidades[unidad]);
        else
            printf ("%s y %s", decimas[decima], unidades[unidad]);
    }
}

void millares_en_letra (unsigned long cantidad)
{
    unsigned long unidades = cantidad % 1000;
    unsigned long miles    = (cantidad / 1000) % 1000;
    if (miles>1)
        unidades_en_letra (miles);
    if (miles!=0)
        printf ("mil");
    if (unidades!=0 && miles!=0)
        printf (" ");
    unidades_en_letra (unidades);
}

void millones_en_letra (unsigned long cantidad)
{
    unsigned long unidades = cantidad % 1000000L;
    unsigned long millares = (cantidad / 1000000L) % 1000000L;
    if (millares>1)
    {
        millares_en_letra (millares);
        printf (" millones");
    }
    else if (millares!=0)
        printf ("un mill\242n");
    if (unidades!=0 && millares!=0)
        printf (" ");
    millares_en_letra (unidades);
}