Vai al contenuto
🛠️ToolsShed

Roman Numeral Arithmetic

Esegui addizione, sottrazione, moltiplicazione e divisione con numeri romani.

= 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

Informazioni sullo strumento

I numeri romani sono un antico sistema di numerazione ancora utilizzato in contesti formali, dalle sfere degli orologi alle date di uscita dei film. Sebbene la lettura dei numeri romani sia semplice, l'esecuzione diretta di operazioni aritmetiche con essi è ingombrante perché la notazione manca di zero e non si allinea con la logica posizionale. Questo strumento elimina quella difficoltà permettendoti di aggiungere, sottrarre, moltiplicare e dividere i numeri romani istantaneamente, convertendo tra numeri romani e arabi senza problemi.

Per utilizzare lo strumento, seleziona l'operazione dal menu a discesa, inserisci due numeri romani o mescola input romani e arabi, quindi fai clic su Calcola. Lo strumento esegue istantaneamente l'operazione aritmetica e visualizza il risultato in entrambi i formati, romano e arabo, rendendo facile verificare il tuo lavoro o comprendere come l'aritmetica romana si relaziona alla notazione moderna. È perfetto per gli studenti che studiano storia, gli appassionati di parole crociate o chiunque sia curioso di sapere come i Romani eseguivano i calcoli prima dell'invenzione dell'algebra.

Domande Frequenti

Implementazione del Codice

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.