Це проблема, яку часто задають в інтерв’ю провідним ІТ-компаніям, таким як Google, Amazon, TCS, і Accenture, і т. д. Вирішуючи проблему, ми хочемо перевірити логічні здібності, критичне мислення та вміння розв’язувати проблеми співрозмовника. Отже, у цьому розділі ми будемо обговорювати як перетворити ціле число на римське в Java з різними підходами та логікою. Крім того, ми створимо програми на Java для цього.
Римські цифри
Римські цифри є символічним позначенням чисел. Вони зазвичай використовуються в циферблатах, теорії музики тощо. Є сім літери, що використовуються для позначення римських цифр. У наведеній нижче таблиці представлено римські цифри та відповідні десяткові значення.
характер | Римська цифра |
---|---|
я | 1 |
IN | 5 |
X | 10 |
Л | п'ятдесят |
C | 100 |
Д | 500 |
М | 1000 |
Римські цифри мають такі властивості:
Зазвичай він записується від найвищого до найнижчого зліва направо, за винятком деяких особливих випадків (де лівий символ менший за правий). Наприклад, римськими цифрами IV еквівалентно 4. Його не можна записати як IIII.
У такому випадку ми віднімаємо значення лівого символу від значення правого символу. Наприклад, IV буде 5-1=4. Таким же чином IX буде 10-1=9.
запитання співбесіди java
Розглянемо такі випадки:
- Римську цифру I можна поставити перед V або X, що означає віднімання одиниці. Наприклад, IV (5-1) = 4, а 9 це IX (10-1) = 9.
- Римську цифру X можна поставити перед L або C, що означає віднімання десяти. Наприклад, XL (50-10) = 40 і XC (100-10) = 90.
- Римська цифра C перед D або M означає віднімання сотні. Наприклад, CD (500-100) = 400 і CM (1000-100) = 900.
Підхід
Підхід до перетворення цілого числа на римське є простим. Спочатку створіть два масиви: один для зберігання значень римських цифр, а другий для зберігання відповідних літер. Створіть екземпляр класу StringBuilder. Тепер порівняйте ціле число з римськими цифрами та виконайте наступне:
- Якщо введене число >= найвище римське число, додайте його до конструктора рядків і зменшіть його відповідне значення з введеного числа.
- Якщо введене число
StringBuilder буде відповідною римською цифрою.
Давайте розберемо описані вище кроки на прикладі.
що таке автоматичне підключення в java
приклад
Припустимо, ми повинні перетворити 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, перевірте наступною римською цифрою, результат =XXX
9>6, перевірте наступною римською цифрою, результат =XXX
5<6, add corresponding literal 'v' to result, result='XXXV,' n='6-5=1</p'>
5>1, перевірте наступною римською цифрою, результат =XXXV
рядок внутр
4>1, перевірте наступною римською цифрою, результат =XXXV
1==1, додайте відповідний літерал «I» до результату, результат =XXXVI, N = 1-1=0
Результат = XXXVI
Програма Java для перетворення цілих чисел на римські цифри
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); } }
Вихід:
Ще один спосіб надрукувати римські цифри — створити чотири масиви розрядних значень. Наприклад, одиниця, десятки, сотня, тисяча. Після цього обчислюється його розрядне значення та перетворюється на римські цифри.
IntegerToRoman.java
javascript сон
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)); } } }
Вихід:
Примітка. Наведена вище програма Java добре працює до 3999.
Вивести римську цифру в заданому діапазоні
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,>