El código Java para esta tarea es prácticamente idéntico al código C del post anterior, sólo tenemos que ponerlo dentro de un método de una clase. En este caso podemos usar la clase TareasProgramación que ya hemos usado en posts anteriores.
public class TareasProgramacion {
private static final String ROMANOS_UNIDADES[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
private static final String ROMANOS_DECENAS[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
private static final String ROMANOS_CENTENAS[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
private static final String ROMANOS_MILES[] = {"", "M", "MM", "MMM"};
public static String cantidadNumerosRomanos(String s) {
StringBuilder result = new StringBuilder();
BigDecimal totalBigDecimal = new BigDecimal(s).setScale(2, BigDecimal.ROUND_DOWN);
long parteEntera = totalBigDecimal.toBigInteger().longValue();
if (parteEntera 3999)
throw new IllegalArgumentException("El número a convertir debe estar entre 1 y 3999.");
int m = (int)parteEntera / 1000, c = (int)(parteEntera % 1000) / 100, d = (int)(parteEntera % 100) / 10, un = (int)parteEntera % 10;
result.append(ROMANOS_MILES[m]);
result.append(ROMANOS_CENTENAS[c]);
result.append(ROMANOS_DECENAS[d]);
result.append(ROMANOS_UNIDADES[un]);
return result.toString();
}
}
Una ejecución de un programa de prueba para el código anterior luce como la siguiente:
Escribe un número entre 1 y 3999:
12
XII
Escribe un número entre 1 y 3999:
1999
MCMXCIX
Escribe un número entre 1 y 3999:
2018
MMXVIII
Escribe un número entre 1 y 3999:
3888
MMMDCCCLXXXVIII
Escribe un número entre 1 y 3999:
3999
MMMCMXCIX
Para obtener el código completo visita el repositorio de github de monstruosoft.