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.