Números romanos en Java
Este tutorial demuestra cómo convertir números enteros a números romanos en Java.
Números romanos en Java
Con frecuencia se requiere convertir los números enteros a números romanos mientras se trabaja en Java. La mayoría de las veces, esta pregunta se hace durante las entrevistas con las principales empresas de TI.
Los números romanos son la representación de caracteres de los números; normalmente podemos encontrar estos números en relojes o teoría musical. Hay un total de siete letras que se utilizan para representar un número en caracteres romanos; ver la tabla a continuación:
romano | Números |
---|---|
I | 1 |
IV | 4 |
V | 5 |
IX | 9 |
X | 10 |
SG | 40 |
L | 50 |
XC | 90 |
C | 100 |
CD | 400 |
D | 500 |
CM | 900 |
METRO | 1000 |
Los números romanos generalmente se escriben de izquierda a derecha y de mayor a menor. La tabla anterior muestra que no podemos usar un número romano más de tres veces; por ejemplo, escribiremos 4 como IV pero no como IIII.
Ahora intentemos crear un enfoque en Java para convertir números enteros en números romanos. Siga los pasos a continuación:
-
Primero, tenemos que crear dos arreglos, uno para el número romano y otro para los enteros.
-
Luego, cree una instancia de la clase de generador de cadenas.
-
El siguiente paso es comparar el número entero con los números romanos.
-
Si el número entero es
>=
, entonces el número romano más alto, debemos agregarlo a la instancia del generador de cadenas y reducir su valor del número de entrada. -
Si el número entero es
<
, entonces el número romano más alto, debemos verificar hasta el número romano más alto y repetir el proceso hasta que el número de entrada sea 0. -
El generador de cadenas final será el número romano convertido.
Ahora intentemos implementar un programa Java basado en los pasos anteriores:
package delftstack;
public class Example {
public static void IntegerToRoman(int DemoInteger) {
System.out.println("The Integer Number is : " + DemoInteger);
int[] IntegerValues = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
String[] RomanValues = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
StringBuilder RomanNumber = new StringBuilder();
for (int x = 0; x < IntegerValues.length; x++) {
while (DemoInteger >= IntegerValues[x]) {
DemoInteger = DemoInteger - IntegerValues[x];
RomanNumber.append(RomanValues[x]);
}
}
System.out.println("The Roman Numeral for given number is: " + RomanNumber.toString());
}
public static void main(String args[]) {
IntegerToRoman(121);
IntegerToRoman(280);
IntegerToRoman(999);
IntegerToRoman(1000);
IntegerToRoman(1100);
}
}
El código anterior convertirá el entero dado a números romanos. Ver la salida:
The Integer Number is : 121
The Roman Numeral for given number is: CXXI
The Integer Number is : 280
The Roman Numeral for given number is: CCLXXX
The Integer Number is : 999
The Roman Numeral for given number is: CMXCIX
The Integer Number is : 1000
The Roman Numeral for given number is: M
The Integer Number is : 1100
The Roman Numeral for given number is: MC
Esta no es la única manera de convertir números enteros a números romanos. También podemos crear cuatro matrices en lugar de dos; estas cuatro matrices serán para números romanos en forma de unidades, decenas, centenas y millares; y luego podemos usar estas matrices para generar números romanos para el número dado usando el mismo método de construcción de cadenas, vea el ejemplo:
package delftstack;
public class Example {
public static String IntegerToRoman(int DemoIntger) {
String[] ThousandsRoman = {"", "M", "MM", "MMM"};
String[] HundredsRoman = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
String[] TensRoman = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
String[] UnitsRoman = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
return ThousandsRoman[DemoIntger / 1000] + HundredsRoman[(DemoIntger % 1000) / 100]
+ TensRoman[(DemoIntger % 100) / 10] + UnitsRoman[DemoIntger % 10];
}
public static void main(String args[]) {
int[] Integers = {
17, 23, 48, 53, 181, 191, 147, 150, 105, 128, 199, 98, 212, 2181, 3118, 1100, 1111};
for (int DemoInteger : Integers) {
System.out.printf("Integer %4d -> Roman %8s\n", DemoInteger, IntegerToRoman(DemoInteger));
}
}
}
El código anterior convertirá la matriz dada de enteros a números romanos uno por uno. Ver salida:
Integer 17 -> Roman XVII
Integer 23 -> Roman XXIII
Integer 48 -> Roman XLVIII
Integer 53 -> Roman LIII
Integer 181 -> Roman CLXXXI
Integer 191 -> Roman CXCI
Integer 147 -> Roman CXLVII
Integer 150 -> Roman CL
Integer 105 -> Roman CV
Integer 128 -> Roman CXXVIII
Integer 199 -> Roman CXCIX
Integer 98 -> Roman XCVIII
Integer 212 -> Roman CCXII
Integer 2181 -> Roman MMCLXXXI
Integer 3118 -> Roman MMMCXVIII
Integer 1100 -> Roman MC
Integer 1111 -> Roman MCXI
Si no quiere usar matrices en su código, también puede usar los Mapas, donde ponemos el valor de cada número entero con sus números y luego lo usamos para convertir números enteros a números romanos. Ver el ejemplo:
package delftstack;
import java.util.LinkedHashMap;
import java.util.Map;
public class Example {
public static String ConvertedRomanNumerals(int DemoInteger) {
LinkedHashMap<String, Integer> RomanNumeralsMap = new LinkedHashMap<String, Integer>();
RomanNumeralsMap.put("M", 1000);
RomanNumeralsMap.put("CM", 900);
RomanNumeralsMap.put("D", 500);
RomanNumeralsMap.put("CD", 400);
RomanNumeralsMap.put("C", 100);
RomanNumeralsMap.put("XC", 90);
RomanNumeralsMap.put("L", 50);
RomanNumeralsMap.put("XL", 40);
RomanNumeralsMap.put("X", 10);
RomanNumeralsMap.put("IX", 9);
RomanNumeralsMap.put("V", 5);
RomanNumeralsMap.put("IV", 4);
RomanNumeralsMap.put("I", 1);
String RomanResult = "";
for (Map.Entry<String, Integer> MapEntry : RomanNumeralsMap.entrySet()) {
int MatchedInteger = DemoInteger / MapEntry.getValue();
RomanResult = RomanResult + RepeatProcess(MapEntry.getKey(), MatchedInteger);
DemoInteger = DemoInteger % MapEntry.getValue();
}
return RomanResult;
}
public static String RepeatProcess(String Roman, int DemoInteger) {
if (Roman == null) {
return null;
}
final StringBuilder DemoRomanBuilder = new StringBuilder();
for (int i = 0; i < DemoInteger; i++) {
DemoRomanBuilder.append(Roman);
}
return DemoRomanBuilder.toString();
}
public static void main(String args[]) {
for (int x = 1; x < 31; x++) {
System.out.println("Integer = " + x + " -> Roman = " + ConvertedRomanNumerals(x));
}
}
}
El código anterior usará Map para convertir el número entero a números romanos. Este código convertirá los números enteros del 1 al 30 en números romanos. Ver salida:
Integer = 1 -> Roman = I
Integer = 2 -> Roman = II
Integer = 3 -> Roman = III
Integer = 4 -> Roman = IV
Integer = 5 -> Roman = V
Integer = 6 -> Roman = VI
Integer = 7 -> Roman = VII
Integer = 8 -> Roman = VIII
Integer = 9 -> Roman = IX
Integer = 10 -> Roman = X
Integer = 11 -> Roman = XI
Integer = 12 -> Roman = XII
Integer = 13 -> Roman = XIII
Integer = 14 -> Roman = XIV
Integer = 15 -> Roman = XV
Integer = 16 -> Roman = XVI
Integer = 17 -> Roman = XVII
Integer = 18 -> Roman = XVIII
Integer = 19 -> Roman = XIX
Integer = 20 -> Roman = XX
Integer = 21 -> Roman = XXI
Integer = 22 -> Roman = XXII
Integer = 23 -> Roman = XXIII
Integer = 24 -> Roman = XXIV
Integer = 25 -> Roman = XXV
Integer = 26 -> Roman = XXVI
Integer = 27 -> Roman = XXVII
Integer = 28 -> Roman = XXVIII
Integer = 29 -> Roman = XXIX
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook