Saltar al contenido
🛠️ToolsShed

Roman Numeral Arithmetic

Realiza suma, resta, multiplicación y división con números romanos.

= 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

Acerca de esta herramienta

Los números romanos son un antiguo sistema de numeración que aún se usa en contextos formales, desde las esferas de reloj hasta las fechas de estreno de películas. Aunque leer números romanos es directo, realizar operaciones aritméticas con ellos directamente es engorroso porque la notación carece de cero y no se alinea con la lógica posicional. Esta herramienta elimina esa dificultad al permitirte sumar, restar, multiplicar y dividir números romanos instantáneamente, convirtiendo entre números romanos y arábigos de manera transparente.

Para usar la herramienta, selecciona la operación del menú desplegable, ingresa dos números romanos o mezcla entradas romanas y arábigas, y luego haz clic en Calcular. La herramienta realiza la operación aritmética al instante y muestra el resultado en ambos formatos, roman y arábigo, facilitando la verificación de tu trabajo o la comprensión de cómo la aritmética romana se relaciona con la notación moderna. Es perfecto para estudiantes de historia, entusiastas de crucigramas o cualquiera curioso sobre cómo los romanos realizaban cálculos antes de que se inventara el álgebra.

Preguntas Frecuentes

Implementación de Código

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.