logo

Konvertera heltal till romerska siffror i Java

Det är ett problem som ofta ställs i intervjuer av topp IT-företag som Google, Amazon, TCS, och Accenture, etc. Genom att lösa problemet vill man kontrollera intervjupersonens logiska förmåga, kritiska tänkande och problemlösningsförmåga. Så i det här avsnittet kommer vi att diskutera hur man konverterar heltal till romerska i Java med olika tillvägagångssätt och logik. Vi kommer också att skapa Java-program för detsamma.

Konvertera heltal till romerska siffror i Java

Romerska siffror

Romerska siffror är den symboliska representationen av siffror. Dessa används vanligtvis i urtavlor, musikteori etc. Det finns sju bokstäver som används för att representera romerska siffror. Följande tabell representerar romerska siffror och motsvarande decimalvärden.

Karaktär Romerska siffror
jag 1
I 5
X 10
L femtio
C 100
D 500
M 1000

Romerska siffror har följande egenskaper:

Det skrivs vanligtvis högst till lägst från vänster till höger, förutom vissa specialfall (där det vänstra tecknet är mindre än det högra tecknet). Till exempel i romerska siffror motsvarar IV 4. Det kan inte skrivas som IIII.

I ett sådant fall subtraherar vi det vänstra teckenvärdet från det högra teckenvärdet. Till exempel kommer IV att vara 5-1=4. På samma sätt blir IX 10-1=9.

Tänk på följande fall:

  • Den romerska siffran I kan placeras före V eller X, representerar subtrahera ett. Till exempel, IV (5-1) = 4 och 9 är IX (10-1) = 9.
  • Den romerska siffran X kan placeras innan L eller C representerar subtrahera tio. Till exempel, XL (50-10) = 40 och XC (100-10) = 90.
  • Den romerska siffran C placerad före D eller M representerar subtrahera hundra. Till exempel, CD (500-100) = 400 och CM (1000-100) = 900.

Närma sig

En metod för att konvertera heltal till romerska siffror är enkel. Skapa först två arrayer, en för att lagra värden för romerska siffror och den andra för att lagra motsvarande bokstäver. Skapa en instans av StringBuilder-klassen. Jämför nu heltal med romerska siffror och gör följande:

  • Om det inmatade numret är >= högsta romerska siffran, lägg till det i strängbyggaren och minska dess motsvarande värde från inmatningsnumret.
  • Om inmatat nummer är

StringBuilder kommer att vara den motsvarande romerska siffran.

Låt oss förstå stegen ovan genom ett exempel.

Exempel

Anta att vi måste omvandla 36 till romerska siffror. Jämför heltal med romerska värden enligt följande.

java-sträng till int

1000>36 = ​​ja, kolla med nästa romerska siffra.

900>36 = ​​ja, kolla med nästa romerska siffra.

500>36 = ​​ja, kolla med nästa romerska siffra.

400>36 = ​​ja, kolla med nästa romerska siffra.

100>36 = ​​ja, kolla med nästa romerska siffra.

90>36 = ​​ja, kolla med nästa romerska siffra.

50>36 = ​​ja, kolla med nästa romerska siffra.

40>36 = ​​ja, kolla med nästa romerska siffra.

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, kolla med nästa romerska siffra, resultat =XXX

9>6, kontrollera med nästa romerska siffra, resultat =XXX

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

5>1, kolla med nästa romerska siffra, resultat =XXXV

4>1, kontrollera med nästa romerska siffra, resultat =XXXV

1==1, lägg till motsvarande bokstavliga 'I' till resultatet, resultat =XXXVI, N = 1-1=0

Resultat = XXXVI

Java-program för att konvertera heltal till romerska siffror

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

Produktion:

Konvertera heltal till romerska siffror i Java

Ett annat sätt att skriva ut romerska siffror är att skapa fyra matriser med platsvärden. Till exempel enhet, tiotals, hundra och tusen. Efter det, beräknar dess platsvärde och konverterar till romerska siffror.

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

Produktion:

Konvertera heltal till romerska siffror i Java

Obs: Ovanstående Java-program fungerar bra upp till 3999.

Skriv ut romerska siffror i ett givet intervall

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