Aller au contenu
🛠️ToolsShed

Roman Numeral Arithmetic

Effectuer l'addition, la soustraction, la multiplication et la division avec les chiffres romains.

= 14

= 9

RomanNumeralArithmetic.reference

I

1

V

5

X

10

L

50

C

100

D

500

M

1000

RomanNumeralArithmetic.rules

  • RomanNumeralArithmetic.rule1
  • RomanNumeralArithmetic.rule2
  • RomanNumeralArithmetic.rule3

À propos de cet outil

Les chiffres romains sont un ancien système de numération encore utilisé dans des contextes formels, des cadrans de montres aux dates de sortie des films. Bien que la lecture des chiffres romains soit simple, effectuer des opérations arithmétiques avec eux directement est fastidieux car la notation n'a pas de zéro et ne s'aligne pas avec la logique positionnelle. Cet outil élimine cette difficulté en vous permettant d'additionner, soustraire, multiplier et diviser les chiffres romains instantanément, en convertissant entre chiffres romains et arabes de manière transparente.

Pour utiliser l'outil, sélectionnez l'opération dans le menu déroulant, entrez deux chiffres romains ou mélangez des entrées romaines et arabes, puis cliquez sur Calculer. L'outil effectue l'opération arithmétique instantanément et affiche le résultat dans les deux formats, romain et arabe, ce qui facilite la vérification de votre travail ou la compréhension de la relation entre l'arithmétique romaine et la notation moderne. C'est parfait pour les étudiants en histoire, les amateurs de mots croisés ou toute personne curieuse de savoir comment les Romains effectuaient les calculs avant l'invention de l'algèbre.

Questions Fréquentes

Implémentation du Code

ROMAN_VALUES = [
    (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')
]

def to_int(roman: str) -> int:
    """Convert Roman numeral string to integer."""
    values = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
    result, prev = 0, 0
    for ch in reversed(roman.upper()):
        val = values[ch]
        if val < prev:
            result -= val
        else:
            result += val
        prev = val
    return result

def to_roman(n: int) -> str:
    """Convert integer (1-3999) to Roman numeral string."""
    if not 1 <= n <= 3999:
        raise ValueError("Number must be between 1 and 3999")
    result = ""
    for value, numeral in ROMAN_VALUES:
        while n >= value:
            result += numeral
            n -= value
    return result

# Arithmetic operations
def roman_add(a: str, b: str) -> str:
    return to_roman(to_int(a) + to_int(b))

def roman_sub(a: str, b: str) -> str:
    return to_roman(to_int(a) - to_int(b))

def roman_mul(a: str, b: str) -> str:
    return to_roman(to_int(a) * to_int(b))

def roman_div(a: str, b: str) -> str:
    r = to_int(a) // to_int(b)
    return to_roman(r)

# Examples
print(f"XIV + IX = {roman_add('XIV', 'IX')}")    # 14+9=23 = XXIII
print(f"L - XIII = {roman_sub('L', 'XIII')}")    # 50-13=37 = XXXVII
print(f"V × IV = {roman_mul('V', 'IV')}")         # 5×4=20 = XX
print(f"XX ÷ IV = {roman_div('XX', 'IV')}")       # 20÷4=5 = V

# Convert between formats
for n in [1, 4, 9, 14, 40, 90, 399, 1994, 2024]:
    print(f"{n} = {to_roman(n)}")

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.