Java のローマ数字

Sheeraz Gul 2023年10月12日
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 Gul
Sheeraz Gul avatar Sheeraz Gul avatar

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