logo

Konverter heltal til romertal i Java

Det er et problem, der ofte stilles i interviews af top IT-virksomheder som f.eks Google, Amazon, TCS, og Accenture, osv. Ved at løse problemet ønsker man at kontrollere interviewpersonens logiske evne, kritiske tænkning og problemløsningsevne. Så i dette afsnit vil vi diskutere hvordan man konverterer heltal til romersk i Java med forskellige tilgange og logik. Vi vil også oprette Java-programmer til det samme.

Konverter heltal til romertal i Java

romertal

Romertal er den symbolske repræsentation af tal. Disse bruges normalt i urskiver, musikteori osv. Der er syv bogstaver, der bruges til at repræsentere romertal. Følgende tabel repræsenterer romertal og tilsvarende decimalværdier.

Karakter romertal
jeg 1
I 5
x 10
L halvtreds
C 100
D 500
M 1000

Romertal har følgende egenskaber:

Det skrives normalt i højeste til laveste fra venstre mod højre, undtagen nogle specielle tilfælde (hvor venstre tegn er mindre end højre tegn). For eksempel svarer IV i romertal til 4. Det kan ikke skrives som IIII.

I et sådant tilfælde trækker vi fra den venstre tegnværdi fra den højre tegnværdi. For eksempel vil IV være 5-1=4. På samme måde vil IX være 10-1=9.

iterere kort i java

Overvej følgende tilfælde:

  • Romertallet I kan placeres før V eller X, repræsenterer subtraher en. For eksempel er IV (5-1) = 4 og 9 IX (10-1) = 9.
  • Romertallet X kan placeres før L eller C repræsenterer subtraher ti. For eksempel, XL (50-10) = 40 og XC (100-10) = 90.
  • Romertallet C placeret før D eller M repræsenterer subtraher hundrede. For eksempel CD (500-100) = 400 og CM (1000-100) = 900.

Nærme sig

En tilgang til at konvertere heltal til romertal er enkel. Først skal du oprette to arrays, en til lagring af værdierne af romertal og for det andet til lagring af de tilsvarende bogstaver. Opret en forekomst af StringBuilder-klassen. Sammenlign nu hele tallet med romertal og gør følgende:

  • Hvis inputtal er >= højeste romertal, skal du tilføje det til strengbyggeren og reducere dets tilsvarende værdi fra inputtallet.
  • Hvis inputnummer er

StringBuilder vil være det tilsvarende romertal.

Lad os forstå ovenstående trin gennem et eksempel.

java scan.nextstring

Eksempel

Antag, at vi skal konvertere 36 til romertal. Sammenlign heltallet med romerske værdier som følger.

1000>36 = ​​ja, tjek med næste romertal.

900>36 = ​​ja, tjek med næste romertal.

500>36 = ​​ja, tjek med næste romertal.

400>36 = ​​ja, tjek med næste romertal.

100>36 = ​​ja, tjek med næste romertal.

90>36 = ​​ja, tjek med næste romertal.

50>36 = ​​ja, tjek med næste romertal.

40>36 = ​​ja, tjek med næste romertal.

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, tjek med næste romertal, resultat =XXX

statisk funktion i java

9>6, tjek med næste romertal, resultat =XXX

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

5>1, tjek med næste romertal, resultat =XXXV

4>1, tjek med næste romertal, resultat =XXXV

1==1, føj tilsvarende bogstavelige 'I' til resultatet, resultat =XXXVI, N = 1-1=0

Resultat = XXXVI

Java-program til at konvertere heltal til romertal

IntegerToRoaman.java

java punkt
 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:

Konverter heltal til romertal i Java

En anden måde at udskrive romertal på er at oprette fire arrays af stedværdier. For eksempel enhed, tiere, hundrede og tusinde. Derefter beregner dens stedværdi og konverterer til romertal.

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:

Konverter heltal til romertal i Java

Bemærk: Ovenstående Java-program fungerer fint op til 3999.

Udskriv romertal i et givet område

DecimaltoRoman.java

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