Tai yra problema, dažnai užduodama interviu iš geriausių IT įmonių, tokių kaip Google, Amazon, TCS, ir „Accenture“, tt Sprendžiant problemą norima patikrinti pašnekovo loginius gebėjimus, kritinį mąstymą, problemų sprendimo įgūdžius. Taigi, šiame skyriuje mes aptarsime kaip konvertuoti sveikąjį skaičių į romėnišką Java su skirtingais požiūriais ir logika. Taip pat tam sukursime Java programas.
Romėniški skaitmenys
Romėniški skaitmenys yra simbolinis skaičių vaizdavimas. Paprastai jie naudojami laikrodžių ciferblatuose, muzikos teorijoje ir kt. Yra septyni raidės, naudojamos romėniškiems skaitmenims žymėti. Toliau pateiktoje lentelėje pateikiami romėniški skaitmenys ir atitinkamos dešimtainės reikšmės.
Charakteris | Romėniškas skaitmuo |
---|---|
aš | 1 |
IN | 5 |
X | 10 |
L | penkiasdešimt |
C | 100 |
D | 500 |
M | 1000 |
Romėniški skaitmenys turi šias savybes:
Paprastai jis rašomas nuo didžiausio iki žemiausio iš kairės į dešinę, išskyrus kai kuriuos specialius atvejus (kai kairysis simbolis yra mažesnis už dešinįjį). Pavyzdžiui, romėniškais skaitmenimis IV yra lygiavertis 4. Jis negali būti parašytas kaip IIII.
Tokiu atveju iš dešiniojo simbolio reikšmės atimame kairiojo simbolio reikšmę. Pavyzdžiui, IV bus 5-1=4. Lygiai taip pat IX bus 10-1=9.
Apsvarstykite šiuos atvejus:
- Romėniškas skaitmuo I gali būti dedamas prieš V arba X, reiškia atimti vieną. Pavyzdžiui, IV (5-1) = 4 ir 9 yra IX (10-1) = 9.
- Romėniškas skaitmuo X gali būti dedamas prieš L arba C reiškia atimti dešimt. Pavyzdžiui, XL (50–10) = 40 ir XC (100–10) = 90.
- Prieš D arba M esantis romėniškas skaitmuo C reiškia atimti šimtą. Pavyzdžiui, CD (500–100) = 400 ir CM (1000–100) = 900.
metodas
Sveikąjį skaičių konvertuoti į romėniškus skaičius yra paprastas būdas. Pirma, sukurkite du masyvus, kuriuose bus saugomos romėniškų skaitmenų reikšmės, o antrasis - atitinkamoms raidėms. Sukurkite „StringBuilder“ klasės egzempliorių. Dabar palyginkite sveikąjį skaičių su romėniškais skaitmenimis ir atlikite šiuos veiksmus:
- Jei įvesties skaičius yra >= didžiausias romėniškas skaitmuo, pridėkite jį prie eilučių kūrimo priemonės ir sumažinkite atitinkamą jo reikšmę nuo įvesties skaičiaus.
- Jei įvesties numeris yra
StringBuilder bus atitinkamas romėniškas skaitmuo.
Supraskime aukščiau nurodytus veiksmus naudodami pavyzdį.
Pavyzdys
Tarkime, turime konvertuoti 36 į romėniškus skaitmenis. Palyginkite sveikąjį skaičių su romėniškomis reikšmėmis taip.
1000>36 = taip, patikrinkite su kitu romėnišku skaitmeniu.
900>36 = taip, patikrinkite kitu romėnišku skaitmeniu.
500>36 = taip, patikrinkite kitu romėnišku skaitmeniu.
400>36 = taip, patikrinkite su kitu romėnišku skaitmeniu.
100>36 = taip, patikrinkite kitu romėnišku skaitmeniu.
90>36 = taip, patikrinkite kitu romėnišku skaitmeniu.
50>36 = taip, patikrinkite su kitu romėnišku skaitmeniu.
40>36 = taip, patikrinkite su kitu romėnišku skaitmeniu.
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, patikrinkite kitu romėnišku skaitmeniu, rezultatas =XXX
9>6, patikrinkite kitu romėnišku skaitmeniu, rezultatas =XXX
5<6, add corresponding literal 'v' to result, result='XXXV,' n='6-5=1</p'>
5>1, patikrinkite kitu romėnišku skaitmeniu, rezultatas =XXXV
4>1, patikrinkite kitu romėnišku skaitmeniu, rezultatas =XXXV
1==1, prie rezultato pridėkite atitinkamą raidę „I“, rezultatas =XXXVI, N = 1-1=0
Rezultatas = XXXVI
„Java“ programa, skirta sveikiesiems skaičiams konvertuoti į romėniškus skaitmenis
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); } }
Išvestis:
Kitas būdas spausdinti romėniškus skaitmenis – sukurti keturias vietos verčių matricas. Pavyzdžiui, vienetas, dešimtys, šimtas ir tūkstantis. Po to apskaičiuojama jo vietos vertė ir konvertuojama į romėniškus skaitmenis.
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)); } } }
Išvestis:
Pastaba: aukščiau pateikta Java programa puikiai veikia iki 3999.
Spausdinkite romėnišką skaičių tam tikru diapazonu
DecimaltoRoman.java
išvalykite npm talpyklą
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,>