Aquí hay un programa Java que encontré en StackOverflow.com. Este código funciona con precisión. Sin embargo, espero que pueda convertir esto al código C que solicitó en su pregunta.
Enlace: code.geeksforgeeks.org
Código
- ¿Cómo se puede implementar un algoritmo de ordenación rápida en el cálculo Lambda?
- ¿Cuál fue su enfoque para aprender estructuras de datos y algoritmos?
- ¿Cuántas puertas lógicas se necesitan para multiplicar dos enteros de n bits?
- ¿Cómo podrías escribir un programa que ingrese un número entero positivo N y genere el número de Fibonacci F2N?
- ¿Cómo funcionan los mecanismos del filtro de revisión de Yelp?
clase pública IntToEnglish {
Cadena estática [] a_19 = {“cero”, “uno”, “dos”, “tres”, “cuatro”, “cinco”, “seis”,
“siete”, “ocho”, “nueve”, “diez”, “once”, “doce”, “trece”,
“catorce”, “quince”, “dieciseis”, “diecisiete”, “dieciocho”, “diecinueve”};
Cadena estática [] decenas = {“veinte”, “treinta”, “cuarenta”, “cincuenta”, “sesenta”, “setenta”, “ochenta”, “noventa”};
Cadena estática [] denom = {“”, “mil”, “millones”, “mil millones”, “billones”, “cuatrillones”,
“quintillion”, “sextillion”, “septillion”, “octillion”, “nonillion”, “decillion”, “undecillion”, “duodecillion”, “tredecillion”, “quattuordecillion”,
“sexdecillion”, “septendecillion”, “octodecillion”, “novemdecillion”, “vigintillion”};
public static void main (String [] argv) lanza Exception {
int tstValue = 21345;
IntToEnglish itoe = nuevo IntToEnglish ();
System.out.println (itoe.english_number (tstValue));
}
// convierte un valor <100 a inglés.
La cadena privada convert_nn (int val) genera una excepción {
si (val <20)
volver a_19 [val];
para (int v = 0; v <longitud de decenas; v ++) {
Cadena dcap = decenas [v];
int dval = 20 + 10 * v;
if (dval + 10> val) {
if ((val% 10)! = 0)
return dcap + “-” + to_19 [val% 10];
devolver dcap;
}
}
lanzar una nueva Excepción (“Nunca debería llegar aquí, menos de 100 fallas”);
}
// convierte un valor <1000 a inglés, en mayúsculas especiales porque es el nivel que patea
// fuera del caso especial <100. El resto son más generales. Esto también te permite
// obtener cadenas en forma de “cuarenta y quinientos” si se llama directamente.
La cadena privada convert_nnn (int val) genera una excepción {
Palabra de cadena = “”;
int rem = val / 100;
int mod = val% 100;
if (rem> 0) {
palabra = to_19 [rem] + “cien”;
if (mod> 0) {
palabra = palabra + “”;
}
}
if (mod> 0) {
palabra = palabra + convert_nn (mod);
}
palabra de retorno;
}
public String english_number (int val) lanza Exception {
si (val <100) {
devuelve convert_nn (val);
}
si (val <1000) {
devuelve convert_nnn (val);
}
for (int v = 0; v <denom.length; v ++) {
int didx = v – 1;
int dval = new Double (Math.pow (1000, v)). intValue ();
if (dval> val) {
int mod = new Double (Math.pow (1000, didx)). intValue ();
int l = val / mod;
int r = val – (l * mod);
Cadena ret = convert_nnn (l) + “” + denom [didx];
si (r> 0) {
ret = ret + “,” + número_en inglés (r);
}
volver ret;
}
}
lanzar una nueva Excepción (“Nunca debería llegar aquí, tocado fondo en inglés_number”);
}
}
¡Espero que esto ayude! 🙂