Сложение римских чисел в информатике.
Мне нужно написать код, в котором складываются римские числа, без перевода в 10-ю систему. У меня есть алгоритм для сложения, но в итоге получаются большие числа, записанные не по правилам записи римских чисел (например CCCCCLLXXXVIIII). Мне нужен алгоритм, с помощью которого я смогу преобразовать числа в правильный вид (из CCCCCLLXXXVIIII в DCXLV). Если нужен мой алгоритм, я его скину
Ответы
Ответ:
Короче ждать не охота твоего алгоритма, напишу 2 программы, сам выберешь, приложу ссылки на код в компиляторе онлайн, сразу проверишь, если че не так, исправлю.
Объяснение:
1) по заданию (https://www.online-python.com/SmbM0Afazu)
def convert_to_roman(n):
return n.replace('IIII', 'IV').replace('VIV', 'IX').replace('XXXX', 'XL').replace('LXL', 'XC').replace('CCCC', 'CD').replace('DCD', 'CM')
unprocessed_roman_numeral = "CCCCCLXXXXVIIII"
print(convert_to_roman(unprocessed_roman_numeral))
2) программа которая просто делает сложение римских цифр, при чем ей неважно какие ты данные ввел в начале, арабские или римские, она переведет и посчитает все в римские. (https://www.online-python.com/QwWtEMopfa)
def roman_to_int(s):
r = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
res = 0
for i in range(len(s)):
if i > 0 and r[s[i]] > r[s[i-1]]:
res += r[s[i]] - 2 * r[s[i-1]]
else:
res += r[s[i]]
return res
def int_to_roman(n):
r = {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'}
res = ''
for value, numeral in r.items():
while n >= value:
res += numeral
n -= value
return res
def add_roman_and_arabic_numbers(a, b):
f = roman_to_int if a.isalpha() else int
s = roman_to_int if b.isalpha() else int
return int_to_roman(f(a) + s(b))
i1 = input("Введите первое римское или арабское число: ")
i2 = input("Введите второе римское или арабское число: ")
r = add_roman_and_arabic_numbers(i1, i2)
print(f"Результат сложения в римских цифрах: {r}")
