logo

Converteix nombres enters en números romans a Java

És un problema que se sol preguntar a les entrevistes de les principals empreses de TI com Google, Amazon, TCS, i Accenture, etc. En resoldre el problema, es vol comprovar la capacitat lògica, el pensament crític i l'habilitat per resoldre problemes de l'entrevistat. Així doncs, en aquest apartat parlarem com convertir nombre enter a roman a Java amb diferents enfocaments i lògica. A més, crearem programes Java per al mateix.

Converteix nombres enters en números romans a Java

Números romans

Els números romans són la representació simbòlica dels nombres. Normalment s'utilitzen en esferes de rellotge, teoria musical, etc. N'hi ha set lletres utilitzades per representar números romans. La taula següent representa els números romans i els valors decimals corresponents.

Personatge Roman Numeral
jo 1
EN 5
X 10
L 50
C 100
D 500
M 1000

Els números romans tenen les següents propietats:

Normalment s'escriu de major a menor d'esquerra a dreta, excepte en alguns casos especials (on el caràcter esquerre és menor que el caràcter dret). Per exemple, en nombres romans IV equival a 4. No es pot escriure com a IIII.

En aquest cas, restem el valor del caràcter esquerre del valor del caràcter dret. Per exemple, IV serà 5-1=4. De la mateixa manera IX serà 10-1=9.

Considereu els casos següents:

  • El nombre romà I es pot col·locar abans de V o X, representa restar un. Per exemple, IV (5-1) = 4 i 9 és IX (10-1) = 9.
  • El nombre romà X es pot col·locar abans de que L o C representi restar deu. Per exemple, XL (50-10) = 40 i XC (100-10) = 90.
  • El nombre romà C posat davant de D o M representa restar cent. Per exemple, CD (500-100) = 400 i CM (1000-100) = 900.

Aproximació

Un mètode per convertir nombres enters en números romans és senzill. Primer, creeu dues matrius una per emmagatzemar els valors dels números romans i la segona per emmagatzemar les lletres corresponents. Creeu una instància de la classe StringBuilder. Ara compareu el nombre enter amb números romans i feu el següent:

  • Si el número d'entrada és >= el nombre romà més alt, afegiu-lo al generador de cadenes i reduïu el seu valor corresponent del número d'entrada.
  • Si el número d'entrada és

El StringBuilder serà el número romà corresponent.

Entendrem els passos anteriors mitjançant un exemple.

10 ml en oz

Exemple

Suposem que hem de convertir 36 en nombres romans. Compareu el nombre enter amb els valors romans de la següent manera.

1000>36 = ​​sí, comproveu amb el següent número romà.

900>36 = ​​sí, comproveu amb el següent número romà.

500>36 = ​​sí, comproveu amb el següent número romà.

400>36 = ​​sí, comproveu amb el següent número romà.

100>36 = ​​sí, comproveu amb el següent número romà.

90>36 = ​​sí, comproveu amb el següent número romà.

50>36 = ​​sí, comproveu amb el següent número romà.

40>36 = ​​sí, comproveu amb el següent nombre romà.

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, comproveu amb el següent número romà, resultat =XXX

9>6, comproveu amb el següent número romà, resultat =XXX

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

5>1, comproveu amb el següent número romà, resultat =XXXV

quina col·lecció en java

4>1, comproveu amb el següent número romà, resultat =XXXV

1==1, afegiu el literal 'I' corresponent al resultat, resultat =XXXVI, N = 1-1=0

Resultat = XXXVI

Programa Java per convertir nombres enters a números romans

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); } } 

Sortida:

Converteix nombres enters en números romans a Java

Una altra manera d'imprimir números romans és crear quatre matrius de valors de lloc. Per exemple, unitat, desenes, cent i mil. Després d'això, calcula el seu valor posicional i el converteix en números romans.

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)); } } } 

Sortida:

Converteix nombres enters en números romans a Java

Nota: el programa Java anterior funciona bé fins a 3999.

Imprimeix números romans en un rang determinat

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;>