자바의 로마 숫자
이 튜토리얼은 Java에서 정수를 로마 숫자로 변환하는 방법을 보여줍니다.
자바의 로마 숫자
Java에서 작업하는 동안 정수를 로마 숫자로 변환하는 것이 자주 필요합니다. 대부분의 경우 TOP IT 회사와의 인터뷰에서 이 질문을 받습니다.
로마 숫자는 숫자를 나타내는 문자입니다. 우리는 보통 시계나 음악 이론에서 이러한 숫자를 찾을 수 있습니다. 로마자로 숫자를 나타내는 데 사용되는 문자는 총 7개입니다. 아래 표를 참조하십시오.
로마 인 | 숫자 |
---|---|
나 | 1 |
IV | 4 |
V | 5 |
IX | 9 |
엑스 | 10 |
특대 | 40 |
엘 | 50 |
XC | 90 |
씨 | 100 |
CD | 400 |
디 | 500 |
센티미터 | 900 |
중 | 1000 |
로마 숫자는 보통 왼쪽에서 오른쪽으로, 높은 곳에서 낮은 곳으로 씁니다. 위의 표는 로마 숫자를 세 번 이상 사용할 수 없음을 보여줍니다. 예를 들어 IV와 같이 4를 작성하지만 IIII는 작성하지 않습니다.
이제 Java에서 정수를 로마 숫자로 변환하는 방법을 만들어 보겠습니다. 아래 단계를 따르십시오.
-
먼저 두 개의 배열을 만들어야 합니다. 하나는 로마 숫자용이고 다른 하나는 정수용입니다.
-
그런 다음 문자열 작성기 클래스의 인스턴스를 만듭니다.
-
다음 단계는 정수를 로마 숫자와 비교하는 것입니다.
-
정수가
>=
이면 가장 높은 로마 숫자이므로 문자열 빌더 인스턴스에 추가하고 입력 숫자에서 해당 값을 줄여야 합니다. -
정수가
<
이면 가장 높은 로마 숫자, 가장 높은 로마 숫자를 확인하고 입력 숫자가 0이 될 때까지 프로세스를 반복해야 합니다. -
최종 문자열 빌더는 변환된 로마 숫자입니다.
이제 위의 단계를 기반으로 Java 프로그램을 구현해 보겠습니다.
package delftstack;
public class Example {
public static void IntegerToRoman(int DemoInteger) {
System.out.println("The Integer Number is : " + DemoInteger);
int[] IntegerValues = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
String[] RomanValues = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
StringBuilder RomanNumber = new StringBuilder();
for (int x = 0; x < IntegerValues.length; x++) {
while (DemoInteger >= IntegerValues[x]) {
DemoInteger = DemoInteger - IntegerValues[x];
RomanNumber.append(RomanValues[x]);
}
}
System.out.println("The Roman Numeral for given number is: " + RomanNumber.toString());
}
public static void main(String args[]) {
IntegerToRoman(121);
IntegerToRoman(280);
IntegerToRoman(999);
IntegerToRoman(1000);
IntegerToRoman(1100);
}
}
위의 코드는 주어진 정수를 로마 숫자로 변환합니다. 출력을 참조하십시오.
The Integer Number is : 121
The Roman Numeral for given number is: CXXI
The Integer Number is : 280
The Roman Numeral for given number is: CCLXXX
The Integer Number is : 999
The Roman Numeral for given number is: CMXCIX
The Integer Number is : 1000
The Roman Numeral for given number is: M
The Integer Number is : 1100
The Roman Numeral for given number is: MC
정수를 로마 숫자로 변환하는 유일한 방법은 아닙니다. 두 개가 아닌 네 개의 배열을 만들 수도 있습니다. 이 네 개의 배열은 단위, 십, 백, 천 형태의 로마 숫자용입니다. 그런 다음 이러한 배열을 사용하여 동일한 문자열 작성기 메서드를 사용하여 주어진 숫자에 대한 로마 숫자를 생성할 수 있습니다. 예를 참조하세요.
package delftstack;
public class Example {
public static String IntegerToRoman(int DemoIntger) {
String[] ThousandsRoman = {"", "M", "MM", "MMM"};
String[] HundredsRoman = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
String[] TensRoman = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
String[] UnitsRoman = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
return ThousandsRoman[DemoIntger / 1000] + HundredsRoman[(DemoIntger % 1000) / 100]
+ TensRoman[(DemoIntger % 100) / 10] + UnitsRoman[DemoIntger % 10];
}
public static void main(String args[]) {
int[] Integers = {
17, 23, 48, 53, 181, 191, 147, 150, 105, 128, 199, 98, 212, 2181, 3118, 1100, 1111};
for (int DemoInteger : Integers) {
System.out.printf("Integer %4d -> Roman %8s\n", DemoInteger, IntegerToRoman(DemoInteger));
}
}
}
위의 코드는 주어진 정수 배열을 하나씩 로마 숫자로 변환합니다. 출력 참조:
Integer 17 -> Roman XVII
Integer 23 -> Roman XXIII
Integer 48 -> Roman XLVIII
Integer 53 -> Roman LIII
Integer 181 -> Roman CLXXXI
Integer 191 -> Roman CXCI
Integer 147 -> Roman CXLVII
Integer 150 -> Roman CL
Integer 105 -> Roman CV
Integer 128 -> Roman CXXVIII
Integer 199 -> Roman CXCIX
Integer 98 -> Roman XCVIII
Integer 212 -> Roman CCXII
Integer 2181 -> Roman MMCLXXXI
Integer 3118 -> Roman MMMCXVIII
Integer 1100 -> Roman MC
Integer 1111 -> Roman MCXI
코드에서 배열을 사용하지 않으려면 맵을 사용할 수도 있습니다. 여기서 각 정수의 값을 숫자와 함께 입력한 다음 정수를 로마 숫자로 변환하는 데 사용합니다. 예를 참조하십시오.
package delftstack;
import java.util.LinkedHashMap;
import java.util.Map;
public class Example {
public static String ConvertedRomanNumerals(int DemoInteger) {
LinkedHashMap<String, Integer> RomanNumeralsMap = new LinkedHashMap<String, Integer>();
RomanNumeralsMap.put("M", 1000);
RomanNumeralsMap.put("CM", 900);
RomanNumeralsMap.put("D", 500);
RomanNumeralsMap.put("CD", 400);
RomanNumeralsMap.put("C", 100);
RomanNumeralsMap.put("XC", 90);
RomanNumeralsMap.put("L", 50);
RomanNumeralsMap.put("XL", 40);
RomanNumeralsMap.put("X", 10);
RomanNumeralsMap.put("IX", 9);
RomanNumeralsMap.put("V", 5);
RomanNumeralsMap.put("IV", 4);
RomanNumeralsMap.put("I", 1);
String RomanResult = "";
for (Map.Entry<String, Integer> MapEntry : RomanNumeralsMap.entrySet()) {
int MatchedInteger = DemoInteger / MapEntry.getValue();
RomanResult = RomanResult + RepeatProcess(MapEntry.getKey(), MatchedInteger);
DemoInteger = DemoInteger % MapEntry.getValue();
}
return RomanResult;
}
public static String RepeatProcess(String Roman, int DemoInteger) {
if (Roman == null) {
return null;
}
final StringBuilder DemoRomanBuilder = new StringBuilder();
for (int i = 0; i < DemoInteger; i++) {
DemoRomanBuilder.append(Roman);
}
return DemoRomanBuilder.toString();
}
public static void main(String args[]) {
for (int x = 1; x < 31; x++) {
System.out.println("Integer = " + x + " -> Roman = " + ConvertedRomanNumerals(x));
}
}
}
위의 코드는 Map을 사용하여 정수를 로마 숫자로 변환합니다. 이 코드는 1에서 30까지의 정수를 로마 숫자로 변환합니다. 출력 참조:
Integer = 1 -> Roman = I
Integer = 2 -> Roman = II
Integer = 3 -> Roman = III
Integer = 4 -> Roman = IV
Integer = 5 -> Roman = V
Integer = 6 -> Roman = VI
Integer = 7 -> Roman = VII
Integer = 8 -> Roman = VIII
Integer = 9 -> Roman = IX
Integer = 10 -> Roman = X
Integer = 11 -> Roman = XI
Integer = 12 -> Roman = XII
Integer = 13 -> Roman = XIII
Integer = 14 -> Roman = XIV
Integer = 15 -> Roman = XV
Integer = 16 -> Roman = XVI
Integer = 17 -> Roman = XVII
Integer = 18 -> Roman = XVIII
Integer = 19 -> Roman = XIX
Integer = 20 -> Roman = XX
Integer = 21 -> Roman = XXI
Integer = 22 -> Roman = XXII
Integer = 23 -> Roman = XXIII
Integer = 24 -> Roman = XXIV
Integer = 25 -> Roman = XXV
Integer = 26 -> Roman = XXVI
Integer = 27 -> Roman = XXVII
Integer = 28 -> Roman = XXVIII
Integer = 29 -> Roman = XXIX
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook