HOWTO · Java
Java のローマ数字
このチュートリアルでは、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