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.