То је проблем који се често поставља у интервјуима врхунских ИТ компанија као што су Гоогле, Амазон, ТЦС, и Аццентуре, итд. Решавањем проблема се жели проверити логичка способност, критичко мишљење и вештина решавања проблема испитаника. Дакле, у овом одељку ћемо разговарати како претворити цео број у роман у Јави различитим приступима и логиком. Такође, креираћемо Јава програме за исте.
Римски бројеви
Римски бројеви су симболички приказ бројева. Они се обично користе у сатовима, теорији музике итд. Постоје седам слова која се користе за представљање римских бројева. Следећа табела представља римске бројеве и одговарајуће децималне вредности.
карактер | Римски број |
---|---|
И | 1 |
ИН | 5 |
Икс | 10 |
Л | педесет |
Ц | 100 |
Д | 500 |
М | 1000 |
Римски бројеви имају следећа својства:
Обично се пише од највишег до најнижег с лева на десно, осим у неким посебним случајевима (где је леви знак мањи од десног). На пример, у римским бројевима ИВ је еквивалентно 4. Не може се написати као ИИИИ.
У том случају одузимамо вредност левог знака од вредности десног знака. На пример, ИВ ће бити 5-1=4. На исти начин ИКС ће бити 10-1=9.
Размотрите следеће случајеве:
- Римски број И може се ставити испред В или Кс, представља одузимање један. На пример, ИВ (5-1) = 4 и 9 је ИКС (10-1) = 9.
- Римски број Кс може се ставити испред Л или Ц који представља одузимање десет. На пример, КСЛ (50-10) = 40 и КСЦ (100-10) = 90.
- Римски број Ц постављен испред Д или М представља одузимање сто. На пример, ЦД (500-100) = 400 и ЦМ (1000-100) = 900.
Приступ
Приступ претварању целог броја у римски број је једноставан. Прво направите два низа, један за чување вредности римских бројева, а други за чување одговарајућих слова. Направите инстанцу класе СтрингБуилдер. Сада упоредите цео број са римским бројевима и урадите следеће:
- Ако је улазни број >= највиши римски број, додајте га у алатку за прављење стрингова и смањите одговарајућу вредност од улазног броја.
- Ако је улазни број
СтрингБуилдер ће бити одговарајући римски број.
Хајде да разумемо горе наведене кораке кроз пример.
Пример
претворити стринг у инт јава
Претпоставимо да морамо да претворимо 36 у римске бројеве. Упоредите цео број са римским вредностима на следећи начин.
1000>36 = да, провери следећим римским бројем.
900>36 = да, провери следећим римским бројем.
500>36 = да, провери следећим римским бројем.
400>36 = да, провери следећим римским бројем.
100>36 = да, провери следећим римским бројем.
90>36 = да, провери следећим римским бројем.
50>36 = да, провери следећим римским бројем.
40>36 = да, провери следећим римским бројем.
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, проверите следећим римским бројем, резултат =КСКСКС
9>6, проверите следећим римским бројем, резултат =КСКСКС
5<6, add corresponding literal 'v' to result, result='XXXV,' n='6-5=1</p'>
5>1, проверите следећим римским бројем, резултат =КСКСКСВ
вб и вб нет
4>1, проверите следећим римским бројем, резултат =КСКСКСВ
1==1, додајте одговарајући литерал 'И' у резултат, резултат =КСКСКСВИ, Н = 1-1=0
Резултат = КСКСКСВИ
Јава програм за претварање целог броја у римске бројеве
ИнтегерТоРоаман.јава
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); } }
Излаз:
Други начин штампања римских бројева је креирање четири низа вредности места. На пример, јединица, десетице, стотине и хиљаде. Након тога израчунава његову вредност места и претвара у римске бројеве.
ИнтегерТоРоман.јава
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)); } } }
Излаз:
Напомена: Горе наведени Јава програм ради добро до 3999.
Штампајте римске бројеве у датом опсегу
ДецималтоРоман.јава
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,>