Python Programming

Pythonによる効率的な整数からローマ数字への変換

Spread the love

この記事では、整数をローマ数字に変換する2つのPythonメソッドについて探ります。単純な反復的なアプローチと、より効率的な整数除算を利用したメソッドを調べます。

目次

  1. 整数からローマ数字への変換の反復アプローチ
  2. 整数除算を使用した効率的な変換

整数からローマ数字への変換の反復アプローチ

このメソッドは、ローマ数字とその整数値をマッピングする辞書を使用し、それを反復処理してローマ数字表現を作成します。減算表記(4のIVなど)は明示的に処理されます。


def int_to_roman_iterative(num):
    """反復処理を使用して整数をローマ数字表現に変換します。

    Args:
        num: 変換する整数(1から3999の間でなければなりません)。

    Returns:
        整数のローマ数字表現、または入力が無効な場合はNone。
    """
    if not 1 <= num = value:
            result += symbol
            num -= value
    return result

# 使用例
print(int_to_roman_iterative(3))   # 出力: III
print(int_to_roman_iterative(4))   # 出力: IV
print(int_to_roman_iterative(9))   # 出力: IX
print(int_to_roman_iterative(58))  # 出力: LVIII
print(int_to_roman_iterative(1994)) # 出力: MCMXCIV
print(int_to_roman_iterative(4000)) # 出力: None

このアプローチは理解しやすいですが、whileループ内の繰り返し減算のため、大きな数値では効率が低下する可能性があります。

整数除算を使用した効率的な変換

このメソッドは、整数除算と剰余演算子を使用して、大きな整数を効率的に処理します。ローマ数字のマッピングは一度だけ反復処理されます。


def int_to_roman_division(num):
    """除算を使用して整数をローマ数字表現に変換します。

    Args:
        num: 変換する整数(1から3999の間でなければなりません)。

    Returns:
        整数のローマ数字表現、または入力が無効な場合はNone。
    """
    if not 1 <= num <= 3999:
        return None

    roman_map = { 1000: 'M', 900: 'CM', 500: 'D', 400: 'CD', 100: 'C', 90: 'XC',
                  50: 'L', 40: 'XL', 10: 'X', 9: 'IX', 5: 'V', 4: 'IV', 1: 'I'}

    result = ""
    for value, symbol in roman_map.items():
        result += symbol * (num // value)
        num %= value
    return result

# 使用例
print(int_to_roman_division(3))   # 出力: III
print(int_to_roman_division(4))   # 出力: IV
print(int_to_roman_division(9))   # 出力: IX
print(int_to_roman_division(58))  # 出力: LVIII
print(int_to_roman_division(1994)) # 出力: MCMXCIV
print(int_to_roman_division(4000)) # 出力: None

この除算ベースのアプローチは、冗長な演算を最小限に抑えることで、特に大きな入力数値の場合、パフォーマンスが向上します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です