logo

Convertir números enteros a romanos en Java

Es un problema que se plantea con frecuencia en entrevistas de las principales empresas de TI como Google, Amazon, TCS, y acento, etc. Al resolver el problema, se quiere comprobar la capacidad lógica, el pensamiento crítico y la capacidad de resolución de problemas del entrevistado. Entonces, en esta sección, vamos a discutir cómo convertir un número entero a romano en Java con diferentes enfoques y lógicas. Además, crearemos programas Java para el mismo.

Convertir números enteros a romanos en Java

Números romanos

Los números romanos son la representación simbólica de los números. Suelen utilizarse en esferas de reloj, teoría musical, etc. Siete Letras utilizadas para representar números romanos. La siguiente tabla representa los números romanos y los valores decimales correspondientes.

Personaje Roman Numeral
I 1
EN 5
X 10
l 50
C 100
D 500
METRO 1000

Los números romanos tienen las siguientes propiedades:

Generalmente se escribe de mayor a menor, de izquierda a derecha, excepto en algunos casos especiales (donde el carácter izquierdo es menor que el derecho). Por ejemplo, en números romanos IV equivale a 4. No se puede escribir como IIII.

En tal caso, restamos el valor del carácter izquierdo del valor del carácter derecho. Por ejemplo, IV será 5-1=4. De la misma manera IX será 10-1=9.

Considere los siguientes casos:

  • El número romano I se puede colocar antes de V o X, representa restar uno. Por ejemplo, IV (5-1) = 4 y 9 es IX (10-1) = 9.
  • El número romano X se puede colocar antes de L o C representa restar diez. Por ejemplo, XL (50-10) = 40 y XC (100-10) = 90.
  • El número romano C colocado antes de D o M representa restar cien. Por ejemplo, CD (500-100) = 400 y CM (1000-100) = 900.

Acercarse

Un método para convertir un número entero a un número romano es simple. Primero, cree dos matrices, una para almacenar los valores de los números romanos y la segunda para almacenar las letras correspondientes. Cree una instancia de la clase StringBuilder. Ahora compara el número entero con los números romanos y haz lo siguiente:

  • Si el número de entrada es >= número romano más alto, agréguelo al generador de cadenas y reduzca su valor correspondiente del número de entrada.
  • Si el número de entrada es

El StringBuilder será el número romano correspondiente.

Entendamos los pasos anteriores a través de un ejemplo.

Ejemplo

lista java

Supongamos que tenemos que convertir 36 a números romanos. Compare el número entero con los valores romanos de la siguiente manera.

1000>36 = ​​sí, consultar con el siguiente número romano.

900>36 = ​​sí, consultar con el siguiente número romano.

500>36 = ​​sí, consultar con el siguiente número romano.

400>36 = ​​sí, consultar con el siguiente número romano.

100>36 = ​​sí, consultar con el siguiente número romano.

90>36 = ​​sí, consultar con el siguiente número romano.

50>36 = ​​sí, consultar con el siguiente número romano.

40>36 = ​​sí, consultar con el siguiente número romano.

10<36, add corresponding literal 'x' to result, result='X,' n='36-10=26</p'>

10<26, add corresponding literal 'x' to result, result='XX,' n='26-10=16</p'>

10<16, add corresponding literal 'x' to result, result='XXX,' n='16-10=6</p'>

10>6, verifique con el siguiente número romano, resultado =XXX

9>6, verifique con el siguiente número romano, resultado =XXX

5<6, add corresponding literal 'v' to result, result='XXXV,' n='6-5=1</p'>

5>1, verifique con el siguiente número romano, resultado =XXXV

strep c

4>1, verifique con el siguiente número romano, resultado =XXXV

1==1, agregue el literal 'I' correspondiente al resultado, resultado =XXXVI, N = 1-1=0

Resultado = XXXVI

Programa Java para convertir números enteros a romanos

IntegerToRoaman.java

 public class IntegerToRoman { public static void intToRoman(int num) { System.out.println(&apos;Integer: &apos; + num); int[] values = {1000,900,500,400,100,90,50,40,10,9,5,4,1}; String[] romanLetters = {&apos;M&apos;,&apos;CM&apos;,&apos;D&apos;,&apos;CD&apos;,&apos;C&apos;,&apos;XC&apos;,&apos;L&apos;,&apos;XL&apos;,&apos;X&apos;,&apos;IX&apos;,&apos;V&apos;,&apos;IV&apos;,&apos;I&apos;}; StringBuilder roman = new StringBuilder(); for(int i=0;i= values[i]) { num = num - values[i]; roman.append(romanLetters[i]); } } System.out.println(&apos;Corresponding Roman Numerals is: &apos; + roman.toString()); } public static void main(String args[]) { intToRoman(125); intToRoman(252); intToRoman(1000); intToRoman(1010); } } 

Producción:

Convertir números enteros a romanos en Java

Otra forma de imprimir números romanos es crear cuatro matrices de valores posicionales. Por ejemplo, unidad, decenas, centenas y millares. Después de eso, calcula su valor posicional y conviértelo a números romanos.

IntegerToRoman.java

 public class IntegerToRoman { //method to convert integer to roman //function that converts integer to roman public static String intToRoman(int number) { //creating array of place values String[] thousands = {&apos;&apos;, &apos;M&apos;, &apos;MM&apos;, &apos;MMM&apos;}; String[] hundreds = {&apos;&apos;, &apos;C&apos;, &apos;CC&apos;, &apos;CCC&apos;, &apos;CD&apos;, &apos;D&apos;, &apos;DC&apos;, &apos;DCC&apos;, &apos;DCCC&apos;, &apos;CM&apos;}; String[] tens = {&apos;&apos;, &apos;X&apos;, &apos;XX&apos;, &apos;XXX&apos;, &apos;XL&apos;, &apos;L&apos;, &apos;LX&apos;, &apos;LXX&apos;, &apos;LXXX&apos;, &apos;XC&apos;}; String[] units = {&apos;&apos;, &apos;I&apos;, &apos;II&apos;, &apos;III&apos;, &apos;IV&apos;, &apos;V&apos;, &apos;VI&apos;, &apos;VII&apos;, &apos;VIII&apos;, &apos;IX&apos;}; return thousands[number / 1000] + hundreds[(number % 1000) / 100] + tens[(number % 100) / 10] + units[number % 10]; } public static void main(String args[]) { //creating an array of integers to be convert into roman int[] numbers = {13, 21, 38, 50, 190, 141, 117, 120, 125, 138, 149, 6, 712, 181, 197, 918, 199, 1100, 1101, 1248, 1253}; for (int number : numbers) { System.out.printf(&apos;%4d -&gt; %8s
&apos;, number, intToRoman(number)); } } } 

Producción:

Convertir números enteros a romanos en Java

Nota: El programa Java anterior funciona bien hasta 3999.

Imprimir números romanos en un rango determinado

DecimaltoRoman.java

 import java.util.LinkedHashMap; import java.util.Map; public class DecimaltoRoman { public static String RomanNumerals(int num) { LinkedHashMap romanNumerals = new LinkedHashMap(); //storing roman letters and corresponding decimal values in HashMap romanNumerals.put(&apos;M&apos;, 1000); romanNumerals.put(&apos;CM&apos;, 900); romanNumerals.put(&apos;D&apos;, 500); romanNumerals.put(&apos;CD&apos;, 400); romanNumerals.put(&apos;C&apos;, 100); romanNumerals.put(&apos;XC&apos;, 90); romanNumerals.put(&apos;L&apos;, 50); romanNumerals.put(&apos;XL&apos;, 40); romanNumerals.put(&apos;X&apos;, 10); romanNumerals.put(&apos;IX&apos;, 9); romanNumerals.put(&apos;V&apos;, 5); romanNumerals.put(&apos;IV&apos;, 4); rssomanNumerals.put(&apos;I&apos;, 1); //variable for string the result String result = &apos;&apos;; //loop iterate over Map for(Map.Entry entry : romanNumerals.entrySet()) { int matches = num/entry.getValue(); result = result+repeat(entry.getKey(), matches); num = num % entry.getValue(); } return result; } public static String repeat(String s, int n) { if(s == null) { return null; } final StringBuilder sb = new StringBuilder(); for(int i = 0; i <n; 1 200 i++) { sb.append(s); } converts into string return sb.tostring(); driver code public static void main(string args[]) prints roman numerals from to for (int i="1;i" '+romannumerals(i)); < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/coding-problems/50/convert-integer-roman-numerals-java-4.webp" alt="Convert Integer to Roman Numerals in Java"> <p>Besides the above methods, there are various ways to convert integer to roman such as Using TreeMap, using switch case, etc. </p> <hr></n;>