Bu makale, tamsayıları Roma rakamlarına dönüştürmek için iki Python yöntemini inceliyor. Doğrudan yinelemeli bir yaklaşımı ve tam sayı bölmesini kullanan daha verimli bir yöntemi inceleyeceğiz.
İçerik Tablosu
- Yinelemeli Yaklaşım ile Tam Sayıdan Roma Rakamına Dönüşüm
- Tam Sayı Bölmesi Kullanarak Verimli Dönüşüm
Yinelemeli Yaklaşım ile Tam Sayıdan Roma Rakamına Dönüşüm
Bu yöntem, Roma rakamlarını tam sayı değerlerine eşleyen bir sözlük kullanır ve Roma rakamı gösterimini oluşturmak için bu sözlük üzerinde yineleme yapar. Çıkarma gösterimi (4 için IV gibi) açıkça işlenir.
def int_to_roman_iterative(num):
"""Yineleme kullanarak bir tam sayıyı Roma rakamı gösterimine dönüştürür.
Args:
num: Dönüştürülecek tam sayı (1 ile 3999 arasında olmalıdır).
Returns:
Tam sayının Roma rakamı gösterimi veya giriş geçersizse None.
"""
if not 1 <= num = value:
result += symbol
num -= value
return result
# Örnek Kullanım
print(int_to_roman_iterative(3)) # Çıktı: III
print(int_to_roman_iterative(4)) # Çıktı: IV
print(int_to_roman_iterative(9)) # Çıktı: IX
print(int_to_roman_iterative(58)) # Çıktı: LVIII
print(int_to_roman_iterative(1994)) # Çıktı: MCMXCIV
print(int_to_roman_iterative(4000)) # Çıktı: None
Bu yaklaşım anlaşılması kolaydır, ancak while
döngüsü içindeki tekrarlanan çıkarmalar nedeniyle daha büyük sayılar için daha az verimli olabilir.
Tam Sayı Bölmesi Kullanarak Verimli Dönüşüm
Bu yöntem, daha büyük tam sayıları verimli bir şekilde işlemek için tam sayı bölmesi ve modulo operatörünü kullanır. Roma rakamı eşlemesinde yalnızca bir kez yineleme yapar.
def int_to_roman_division(num):
"""Bölme kullanarak bir tam sayıyı Roma rakamı gösterimine dönüştürür.
Args:
num: Dönüştürülecek tam sayı (1 ile 3999 arasında olmalıdır).
Returns:
Tam sayının Roma rakamı gösterimi veya giriş geçersizse 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
# Örnek Kullanım
print(int_to_roman_division(3)) # Çıktı: III
print(int_to_roman_division(4)) # Çıktı: IV
print(int_to_roman_division(9)) # Çıktı: IX
print(int_to_roman_division(58)) # Çıktı: LVIII
print(int_to_roman_division(1994)) # Çıktı: MCMXCIV
print(int_to_roman_division(4000)) # Çıktı: None
Bu bölmeye dayalı yaklaşım, özellikle daha büyük giriş sayıları için, gereksiz işlemleri en aza indirerek performans artışı sağlar.