Het is een probleem dat vaak wordt gesteld in interviews met top IT-bedrijven zoals Google, Amazon, TCS, En Accenture, enz. Door het probleem op te lossen, wil men het logische vermogen, het kritisch denken en het probleemoplossende vermogen van de geïnterviewde controleren. Daarom gaan we het in deze sectie bespreken Hoe geheel getal naar Romein te converteren in Java met verschillende benaderingen en logica. We zullen hiervoor ook Java-programma's maken.
Romeinse cijfers
Romeinse cijfers zijn de symbolische weergave van getallen. Deze worden meestal gebruikt in wijzerplaten, muziektheorie, enz. Die zijn er zeven letters die worden gebruikt om Romeinse cijfers weer te geven. De volgende tabel geeft de Romeinse cijfers en bijbehorende decimale waarden weer.
Karakter | Romeins cijfer |
---|---|
I | 1 |
IN | 5 |
X | 10 |
L | vijftig |
C | 100 |
D | 500 |
M | 1000 |
Romeinse cijfers hebben de volgende eigenschappen:
Het wordt gewoonlijk geschreven van hoog naar laag, van links naar rechts, behalve in enkele speciale gevallen (waarbij het linkerteken kleiner is dan het rechterteken). In Romeinse cijfers is IV bijvoorbeeld gelijk aan 4. Het kan niet worden geschreven als IIII.
In een dergelijk geval trekken we de linker tekenwaarde af van de rechter tekenwaarde. IV zal bijvoorbeeld 5-1=4 zijn. Op dezelfde manier zal IX 10-1=9 zijn.
'bankiersalgoritme'
Beschouw de volgende gevallen:
- Het Romeinse cijfer I kan vóór V of X worden geplaatst en vertegenwoordigt één aftrekken. IV (5-1) = 4 en 9 is bijvoorbeeld IX (10-1) = 9.
- Het Romeinse cijfer X kan worden geplaatst voordat L of C staat voor aftrekken tien. XL (50-10) = 40 en XC (100-10) = 90.
- Het Romeinse cijfer C, geplaatst vóór D of M, vertegenwoordigt honderd aftrekken. Bijvoorbeeld CD (500-100) = 400 en CM (1000-100) = 900.
Benadering
Een benadering om geheel getal naar Romeins cijfer om te zetten is eenvoudig. Maak eerst twee arrays, één voor het opslaan van de waarden van Romeinse cijfers en de tweede voor het opslaan van de bijbehorende letters. Maak een exemplaar van de StringBuilder-klasse. Vergelijk nu het gehele getal met Romeinse cijfers en doe het volgende:
- Als het invoernummer >= het hoogste Romeinse cijfer is, voegt u dit toe aan de tekenreeksbouwer en verlaagt u de overeenkomstige waarde van het invoernummer.
- Als het ingevoerde nummer is
De StringBuilder zal het overeenkomstige Romeinse cijfer zijn.
Laten we de bovenstaande stappen begrijpen aan de hand van een voorbeeld.
huidige datum in Java
Voorbeeld
Stel dat we 36 moeten omzetten in Romeinse cijfers. Vergelijk het gehele getal als volgt met Romeinse waarden.
1000>36 = ja, controleer met het volgende Romeinse cijfer.
900>36 = ja, controleer met het volgende Romeinse cijfer.
500>36 = ja, controleer met het volgende Romeinse cijfer.
400>36 = ja, controleer met het volgende Romeinse cijfer.
100>36 = ja, controleer met het volgende Romeinse cijfer.
90>36 = ja, controleer met het volgende Romeinse cijfer.
50>36 = ja, controleer met het volgende Romeinse cijfer.
converteer datum naar string
40>36 = ja, controleer met het volgende Romeinse cijfer.
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, controleer met het volgende Romeinse cijfer, resultaat =XXX
9>6, controleer met het volgende Romeinse cijfer, resultaat =XXX
5<6, add corresponding literal 'v' to result, result='XXXV,' n='6-5=1</p'>
5>1, controleer met het volgende Romeinse cijfer, resultaat =XXXV
4>1, controleer met het volgende Romeinse cijfer, resultaat =XXXV
1==1, voeg overeenkomstige letterlijke 'I' toe aan resultaat, resultaat =XXXVI, N = 1-1=0
Resultaat = XXXVI
lijst methoden java
Java-programma om gehele getallen naar Romeinse cijfers te converteren
IntegerToRoaman.java
public class IntegerToRoman { public static void intToRoman(int num) { System.out.println('Integer: ' + num); int[] values = {1000,900,500,400,100,90,50,40,10,9,5,4,1}; String[] romanLetters = {'M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I'}; StringBuilder roman = new StringBuilder(); for(int i=0;i= values[i]) { num = num - values[i]; roman.append(romanLetters[i]); } } System.out.println('Corresponding Roman Numerals is: ' + roman.toString()); } public static void main(String args[]) { intToRoman(125); intToRoman(252); intToRoman(1000); intToRoman(1010); } }
Uitgang:
Een andere manier om Romeinse cijfers af te drukken is door vier reeksen plaatswaarden te maken. Bijvoorbeeld eenheid, tientallen, honderd en duizend. Bereken daarna de plaatswaarde en converteer deze naar Romeinse cijfers.
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 = {'', 'M', 'MM', 'MMM'}; String[] hundreds = {'', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'}; String[] tens = {'', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'}; String[] units = {'', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'}; 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('%4d -> %8s ', number, intToRoman(number)); } } }
Uitgang:
typoscript elk
Let op: Het bovenstaande Java-programma werkt prima tot 3999.
Druk Romeins cijfer af binnen een bepaald bereik
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('M', 1000); romanNumerals.put('CM', 900); romanNumerals.put('D', 500); romanNumerals.put('CD', 400); romanNumerals.put('C', 100); romanNumerals.put('XC', 90); romanNumerals.put('L', 50); romanNumerals.put('XL', 40); romanNumerals.put('X', 10); romanNumerals.put('IX', 9); romanNumerals.put('V', 5); romanNumerals.put('IV', 4); rssomanNumerals.put('I', 1); //variable for string the result String result = ''; //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;>6,>16,>26,>36,>