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.
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('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); } }
Produktion:
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 = {'', '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)); } } }
Produktion:
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('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,>