コンテンツへスキップ
🛠️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

このツールについて

ローマ数字は古代の記数法で、時計の文字盤や映画の公開日など今でも公式な場面で使われています。ローマ数字の読み方は簡単ですが、ゼロがないため算術演算を直接行うのは複雑です。このツールは、ローマ数字の足し算、引き算、掛け算、割り算を瞬時に計算し、ローマ数字とアラビア数字の間をシームレスに変換することで、その煩雑さを解決します。

ツールを使うには、ドロップダウンメニューから操作を選択し、2つのローマ数字、またはローマ数字とアラビア数字の組み合わせを入力してから計算ボタンをクリックします。ツールは即座に計算を実行し、結果をローマ数字とアラビア数字の両方の形式で表示するため、計算を検証したり、ローマ数字の算術が現代の記数法とどのように関連しているかを理解しやすくなります。歴史を学ぶ学生、クロスワードの愛好家、古代ローマ人がどのように計算を行ったかに興味がある人に最適です。

よくある質問

コード実装

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.