זו בעיה שנשאלת לעתים קרובות בראיונות של חברות IT מובילות כמו גוגל, אמזון, TCS, ו Accenture, וכו' על ידי פתרון הבעיה, רוצים לבדוק את היכולת הלוגית, החשיבה הביקורתית ומיומנות פתרון הבעיות של המרואיין. אז, בחלק זה, אנחנו הולכים לדון כיצד להמיר מספר שלם לרומי בג'אווה עם גישות והיגיון שונות. כמו כן, ניצור עבור אותו תוכניות Java.
npm נקי מטמון
ספרות רומיות
ספרות רומיות הן הייצוג הסמלי של מספרים. אלה משמשים בדרך כלל בלוחות שעונים, בתורת המוזיקה וכו'. יש שבע אותיות המשמשות לייצוג ספרות רומיות. הטבלה הבאה מייצגת את הספרות הרומיות ואת הערכים העשרוניים המתאימים.
אופי | ספרות רומיות |
---|---|
אני | 1 |
IN | 5 |
איקס | 10 |
ל | חמישים |
ג | 100 |
ד | 500 |
M | 1000 |
לספרות רומיות יש את התכונות הבאות:
זה כתוב בדרך כלל מהגבוהה לנמוך ביותר משמאל לימין, למעט כמה מקרים מיוחדים (כאשר התו השמאלי קטן מהתו הימני). לדוגמה, בספרות רומיות IV שווה ערך ל-4. לא ניתן לכתוב את זה בתור IIII.
במקרה כזה, נחסר את ערך התו השמאלי מערך התו הימני. לדוגמה, IV יהיה 5-1=4. באותו אופן IX יהיה 10-1=9.
שקול את המקרים הבאים:
- ניתן להציב את הספרה הרומית 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 יהיה הספרה הרומית המתאימה.
בואו נבין את השלבים לעיל באמצעות דוגמה.
דוגמא
נניח שעלינו להמיר 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
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,>