Konverter heltall til romertall i Java

Konverter heltall til romertall i Java

Det er et problem som ofte stilles i intervjuer av topp IT-selskaper som Google, Amazon, TCS, og Accenture, etc. Ved å løse problemet ønsker man å sjekke den logiske evnen, kritisk tenkning og problemløsningsevnen til intervjuobjektet. Så i denne delen skal vi diskutere hvordan konvertere heltall til romersk i Java med ulike tilnærminger og logikk. Vi vil også lage Java-programmer for det samme.

Konverter heltall til romertall i Java

Romertall

Romertall er den symbolske representasjonen av tall. Disse brukes vanligvis i urskiver, musikkteori osv. Det finnes syv bokstaver som brukes til å representere romertall. Tabellen nedenfor representerer romertall og tilsvarende desimalverdier.

Karakter romertall
Jeg 1
I 5
X 10
L femti
C 100
D 500
M 1000

Romertall har følgende egenskaper:

Det skrives vanligvis i høyeste til laveste fra venstre til høyre, bortsett fra noen spesielle tilfeller (hvor venstre tegn er mindre enn høyre tegn). For eksempel, i romertall tilsvarer IV 4. Det kan ikke skrives som IIII.

I et slikt tilfelle trekker vi fra den venstre tegnverdien fra den høyre tegnverdien. For eksempel vil IV være 5-1=4. På samme måte vil IX være 10-1=9.

Vurder følgende tilfeller:

  • Romertallet I kan plasseres foran V eller X, representerer subtrahere en. For eksempel er IV (5-1) = 4 og 9 IX (10-1) = 9.
  • Romertallet X kan plasseres før L eller C representerer subtraher ti. For eksempel, XL (50-10) = 40 og XC (100-10) = 90.
  • Romertallet C plassert foran D eller M representerer subtraher hundre. For eksempel, CD (500-100) = 400 og CM (1000-100) = 900.

Nærme seg

En tilnærming for å konvertere heltall til romertall er enkel. Først oppretter du to matriser, en for å lagre verdiene til romertall og den andre for å lagre de tilsvarende bokstavene. Opprett en forekomst av StringBuilder-klassen. Sammenlign nå heltall med romertall og gjør følgende:

  • Hvis inndatanummeret er >= høyeste romertall, legg det til strengbyggeren og reduser dets tilsvarende verdi fra inndatanummeret.
  • Hvis inndatanummeret er

StringBuilder vil være det tilsvarende romertall.

La oss forstå trinnene ovenfor gjennom et eksempel.

Eksempel

Anta at vi må konvertere 36 til romertall. Sammenlign heltallet med romerske verdier som følger.

1000>36 = ​​ja, sjekk med neste romertall.

900>36 = ​​ja, sjekk med neste romertall.

500>36 = ​​ja, sjekk med neste romertall.

400>36 = ​​ja, sjekk med neste romertall.

100>36 = ​​ja, sjekk med neste romertall.

90>36 = ​​ja, sjekk med neste romertall.

50>36 = ​​ja, sjekk med neste romertall.

40>36 = ​​ja, sjekk med neste romertall.

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, sjekk med neste romertall, resultat =XXX

9>6, sjekk med neste romertall, resultat =XXX

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

5>1, sjekk med neste romertall, resultat =XXXV

4>1, sjekk med neste romertall, resultat =XXXV

1==1, legg til tilsvarende bokstavelig 'I' til resultatet, resultat =XXXVI, N = 1-1=0

Resultat = XXXVI

Java-program for å konvertere heltall til romertall

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

Produksjon:

Konverter heltall til romertall i Java

En annen måte å skrive ut romertall på er å lage fire matriser med stedsverdier. For eksempel enhet, tiere, hundre og tusen. Etter det, beregner stedsverdien og konverterer til romertall.

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

Produksjon:

Konverter heltall til romertall i Java

Merk: Java-programmet ovenfor fungerer fint opp til 3999.

Skriv ut romertall i et gitt område

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