HOWTO · Java
자바의 로마 숫자
이 튜토리얼은 Java에서 정수를 로마 숫자로 변환하는 방법을 보여줍니다.
이 튜토리얼은 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