Tā ir problēma, kas bieži tiek uzdota intervijās ar tādiem vadošajiem IT uzņēmumiem kā Google, Amazon, TCS, un Accenture, uc Atrisinot problēmu, vēlas pārbaudīt intervējamā loģiskās spējas, kritisko domāšanu un problēmu risināšanas prasmi. Tāpēc šajā sadaļā mēs to apspriedīsim kā pārvērst veselu skaitli uz romiešu valodā Java ar dažādām pieejām un loģiku. Mēs arī izveidosim Java programmas tam pašam.
Romiešu cipari
Romiešu cipari ir simbolisks skaitļu attēlojums. Tos parasti izmanto pulksteņu ciparnīcās, mūzikas teorijā utt. Ir septiņi burti, ko izmanto, lai apzīmētu romiešu ciparus. Nākamajā tabulā ir parādīti romiešu cipari un atbilstošās decimāldaļas.
Raksturs | Romiešu cipars |
---|---|
es | 1 |
IN | 5 |
X | 10 |
L | piecdesmit |
C | 100 |
D | 500 |
M | 1000 |
Romiešu cipariem ir šādas īpašības:
To parasti raksta no augstākās līdz zemākajai no kreisās puses uz labo, izņemot dažus īpašus gadījumus (kad kreisā rakstzīme ir mazāka par labo rakstzīmi). Piemēram, ar romiešu cipariem IV ir līdzvērtīgs 4. To nevar rakstīt kā IIII.
npm tīru kešatmiņu
Šādā gadījumā mēs atņemam kreisās rakstzīmes vērtību no labās rakstzīmes vērtības. Piemēram, IV būs 5-1=4. Tādā pašā veidā IX būs 10-1=9.
Apsveriet šādus gadījumus:
- Romiešu cipars I var būt pirms V vai X, apzīmē atņemt vienu. Piemēram, IV (5-1) = 4 un 9 ir IX (10-1) = 9.
- Romiešu ciparu X var ievietot pirms L vai C apzīmē atņemt desmit. Piemēram, XL (50-10) = 40 un XC (100-10) = 90.
- Romiešu cipars C, kas novietots pirms D vai M, apzīmē atņemt simtu. Piemēram, CD (500-100) = 400 un CM (1000-100) = 900.
Pieeja
Vesela skaitļa pārvēršana romiešu ciparā ir vienkārša. Pirmkārt, izveidojiet divus masīvus, vienu romiešu ciparu vērtību glabāšanai un otru atbilstošo burtu glabāšanai. Izveidojiet StringBuilder klases gadījumu. Tagad salīdziniet veselo skaitli ar romiešu cipariem un rīkojieties šādi:
- Ja ievades numurs ir >= lielākais romiešu cipars, pievienojiet to virknes veidotājam un samaziniet tā atbilstošo vērtību no ievades skaitļa.
- Ja ievades numurs ir
StringBuilder būs atbilstošais romiešu cipars.
Izpratīsim iepriekš minētās darbības, izmantojot piemēru.
Piemērs
Pieņemsim, ka mums ir jāpārvērš 36 par romiešu cipariem. Salīdziniet veselo skaitli ar romiešu vērtībām šādi.
1000>36 = jā, pārbaudiet ar nākamo romiešu ciparu.
900>36 = jā, pārbaudiet ar nākamo romiešu ciparu.
500>36 = jā, pārbaudiet ar nākamo romiešu ciparu.
400>36 = jā, pārbaudiet ar nākamo romiešu ciparu.
100>36 = jā, pārbaudiet ar nākamo romiešu ciparu.
90>36 = jā, pārbaudiet ar nākamo romiešu ciparu.
50>36 = jā, pārbaudiet ar nākamo romiešu ciparu.
40>36 = jā, pārbaudiet ar nākamo romiešu ciparu.
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, pārbaudiet ar nākamo romiešu ciparu, rezultāts =XXX
9>6, pārbaudiet ar nākamo romiešu ciparu, rezultāts =XXX
5<6, add corresponding literal 'v' to result, result='XXXV,' n='6-5=1</p'>
5>1, pārbaudiet ar nākamo romiešu ciparu, rezultāts =XXXV
salas java
4>1, pārbaudiet ar nākamo romiešu ciparu, rezultāts =XXXV
1==1, rezultātam pievienojiet atbilstošo burtu “I”, rezultāts =XXXVI, N = 1-1=0
Rezultāts = XXXVI
Java programma veselu skaitļu konvertēšanai uz romiešu cipariem
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); } }
Izvade:
Vēl viens veids, kā drukāt romiešu ciparus, ir izveidot četrus vietvērtību masīvus. Piemēram, vienība, desmiti, simts un tūkstotis. Pēc tam aprēķina tā vietvērtību un pārvērš romiešu ciparos.
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)); } } }
Izvade:
Piezīme. Iepriekš minētā Java programma darbojas labi līdz pat 3999.
Drukājiet romiešu ciparus noteiktā diapazonā
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,>