この記事では、整数をローマ数字に変換する2つのPythonメソッドについて探ります。単純な反復的なアプローチと、より効率的な整数除算を利用したメソッドを調べます。
目次
整数からローマ数字への変換の反復アプローチ
このメソッドは、ローマ数字とその整数値をマッピングする辞書を使用し、それを反復処理してローマ数字表現を作成します。減算表記(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
この除算ベースのアプローチは、冗長な演算を最小限に抑えることで、特に大きな入力数値の場合、パフォーマンスが向上します。