leer numero y escribir equivalente en letra

pepote_gg
21 de Diciembre del 2007
Hola, necesito ayuda para hacer un programa en c utilizando funciones que lea un numero escrito por teclado de hasta 4 dígitos entero positivo o negativo y que despues lo escriba por pantalla en letra.
Ejemplo:
Numero introucido: 2578
Resultado por pantalla: dos mil quinientos setenta y ocho

Paco
21 de Diciembre del 2007
#include <stdio.h>
#include <stdlib.h>

int* separarDigitos(int numero, int *digitos)
{
int aux;

digitos[0] = numero / 1000;
aux = numero % 1000;

digitos[1] = aux / 100;
aux = aux % 100;

digitos[2] = aux / 10;
aux = aux % 10;

digitos[3] = aux;

return digitos;
}

void escribirNumero(int *digitos)
{
printf(\"\\n* Transcripcion textual: \");

// Escribe los millares:
switch(digitos[0])
{
case 0: break;
case 1: printf(\"mil \");
break;
case 2: printf(\"dos mil \");
break;
case 3: printf(\"tres mil \");
break;
case 4: printf(\"cuatro mil \");
break;
case 5: printf(\"cinco mil \");
break;
case 6: printf(\"seis mil \");
break;
case 7: printf(\"siete mil \");
break;
case 8: printf(\"ocho mil \");
break;
case 9: printf(\"nueve mil \");
break;
}
// Escribe las centenas:
switch(digitos[1])
{
case 0: break;
case 1: printf(\"ciento \");
break;
case 2: printf(\"doscientos \");
break;
case 3: printf(\"trescientos \");
break;
case 4: printf(\"cuatrocientos \");
break;
case 5: printf(\"quinientos \");
break;
case 6: printf(\"seiscientos \");
break;
case 7: printf(\"sietecientos \");
break;
case 8: printf(\"ochocientos \");
break;
case 9: printf(\"novecientos \");
break;
}
// Escribe las decenas:
switch(digitos[2])
{
case 0: break;
case 1:
{
// Programado por www.elrincondelc.com
switch(digitos[3])
{
case 0: printf(\"diez\");
return;
case 1: printf(\"once\");
return;
case 2: printf(\"doce\");
return;
case 3: printf(\"trece\");
return;
case 4: printf(\"catorce\");
return;
case 5: printf(\"quince\");
return;
default: printf(\"dieci\");
break;
}
}
case 2:
{
if(digitos[3] == 0)
printf(\"veinte\");
else
printf(\"veinti\");
break;
}
case 3: printf(\"treinta \");
break;
case 4: printf(\"cuarenta \");
break;
case 5: printf(\"cincuenta \");
break;
case 6: printf(\"sesenta \");
break;
case 7: printf(\"setenta \");
break;
case 8: printf(\"ochenta \");
break;
case 9: printf(\"noventa \");
break;
}
// Escribe las unidades:
if(digitos[2] > 2)
printf(\"y \");

switch(digitos[3])
{
case 0: break;
case 1: printf(\"uno\");
break;
case 2: printf(\"dos\");
break;
case 3: printf(\"tres\");
break;
case 4: printf(\"cuatro\");
break;
case 5: printf(\"cinco\");
break;
case 6: printf(\"seis\");
break;
case 7: printf(\"siete\");
break;
case 8: printf(\"ocho\");
break;
case 9: printf(\"nueve\");
break;
}
printf(\".\");
return;
}

int main()
{
int numero;
int *digitos = (int*)malloc(4*sizeof(int));

printf(\"\\n* Introducir el número: \");
scanf(\"%d\", &numero);

// Primero separo el número introducido en dígitos separados:
digitos = separarDigitos(numero, digitos);

// Ahora llamo a la función para escribir textualmente los dígitos:
escribirNumero(digitos);

return 0;
}