Предмет: Информатика, автор: YaroslavVelikiy22

Сложение римских чисел в информатике.
Мне нужно написать код, в котором складываются римские числа, без перевода в 10-ю систему. У меня есть алгоритм для сложения, но в итоге получаются большие числа, записанные не по правилам записи римских чисел (например CCCCCLLXXXVIIII). Мне нужен алгоритм, с помощью которого я смогу преобразовать числа в правильный вид (из CCCCCLLXXXVIIII в DCXLV). Если нужен мой алгоритм, я его скину


salpsx: на каком языке?
salpsx: или алгоритм скинь

Ответы

Автор ответа: salpsx
1

Ответ:

Короче ждать не охота твоего алгоритма, напишу 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}")


Приложения:
Похожие вопросы