Pular para o conteúdo
🛠️ToolsShed

Roman Numeral Arithmetic

Realize adição, subtração, multiplicação e divisão com algarismos 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

Sobre esta ferramenta

Os números romanos são um antigo sistema de numeração ainda usado em contextos formais, desde mostradores de relógios até datas de lançamento de filmes. Embora ler números romanos seja direto, realizar operações aritméticas com eles é complicado porque a notação carece de zero e não se alinha com a lógica posicional. Esta ferramenta elimina essa dificuldade ao permitir que você adicione, subtraia, multiplique e divida números romanos instantaneamente, convertendo entre números romanos e arábicos de forma contínua.

Para usar a ferramenta, selecione a operação no menu suspenso, digite dois números romanos ou misture entradas romanas e arábicas, e clique em Calcular. A ferramenta executa a operação aritmética instantaneamente e exibe o resultado nos dois formatos, romano e arábico, facilitando a verificação do seu trabalho ou o entendimento de como a aritmética romana se relaciona com a notação moderna. É perfeito para alunos de história, entusiastas de palavras cruzadas ou qualquer pessoa curiosa sobre como os romanos realizavam cálculos antes da invenção da álgebra.

Perguntas Frequentes

Implementação 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.