Java のローマ数字
このチュートリアルでは、Java で整数をローマ数字に変換する方法を示します。
Java のローマ数字
Java での作業中には、整数をローマ数字に変換することが頻繁に必要になります。 ほとんどの場合、この質問はトップ IT 企業との面接で尋ねられます。
ローマ数字は数字の文字表現です。 これらの数値は通常、時計や音楽理論で見つけることができます。 ローマ字で数字を表すために使用される文字は全部で 7 文字あります。 次の表を参照してください。
ローマン | 数字 |
---|---|
私 | 1 |
Ⅳ | 4 |
Ⅴ | 5 |
IX | 9 |
バツ | 10 |
XL | 40 |
L | 50 |
XC | 90 |
ハ | 100 |
CD | 400 |
D | 500 |
CM | 900 |
M | 1000 |
ローマ数字は通常、左から右へ、上から下へと書かれます。 上の表は、ローマ数字を 3 回以上使用できないことを示しています。 たとえば、IV のように 4 を書きますが、IIII は書きません。
それでは、Java で整数をローマ数字に変換する方法を作成してみましょう。 以下の手順に従います。
-
まず、ローマ数字用と整数用の 2つの配列を作成する必要があります。
-
次に、文字列ビルダー クラスのインスタンスを作成します。
-
次のステップは、整数をローマ数字と比較することです。
-
整数が
>=
の場合は最大のローマ数字であり、それを文字列ビルダー インスタンスに追加し、入力数値からその値を減らす必要があります。 -
整数が
<
の場合は最大のローマ数字であり、最大のローマ数字をチェックして、入力数値が 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
整数をローマ数字に変換する方法はこれだけではありません。 2つではなく 4つの配列を作成することもできます。 これらの 4つの配列は、10、100、1000 の単位のローマ数字用です。 次に、これらの配列を使用して、同じ文字列ビルダー メソッドを使用して、指定された数値のローマ数字を生成できます。例を参照してください。
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));
}
}
}
上記のコードは、指定された整数の配列をローマ数字に 1つずつ変換します。 出力を参照してください:
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
コードで配列を使用したくない場合は、Maps を使用することもできます。ここでは、各整数の値をその数字とともに配置し、それを使用して整数をローマ数字に変換します。 例を参照してください。
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