跳到内容
🛠️ToolsShed

Roman Numeral Arithmetic

使用罗马数字执行加、减、乘、除。

= 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

关于此工具

罗马数字是古代数字系统,至今仍用于时钟表盘和电影发行日期等正式场合。虽然阅读罗马数字很简单,但由于该系统缺少零且不符合位数逻辑,直接进行算术运算会非常繁琐。这个工具可以立即执行罗马数字的加、减、乘、除运算,并在罗马数字和阿拉伯数字之间无缝转换,从而消除这种困难。

要使用该工具,请从下拉菜单中选择运算,输入两个罗马数字或混合输入罗马数字和阿拉伯数字,然后点击计算按钮。工具会立即执行算术运算,并以罗马数字和阿拉伯数字两种格式显示结果,使您可以轻松验证计算或理解罗马算术与现代记数法的关系。它非常适合学习历史的学生、纵横填字爱好者或对古罗马人如何在代数发明前进行计算感到好奇的人。

常见问题

代码实现

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.