T. Цезарю — Цезарево

Ура! Это финальная задачка!

В Древнем Риме использовалась особая система счисления. Чтобы попрактиковаться в сложении римских чисел, напишите функцию roman,
которая принимает два натуральных числа a и b, а возвращает строку вида:

РИМСКОЕ_А + РИМСКОЕ_B = РИМСКАЯ_СУММА

Примечание

В решении не должно быть вызовов требуемых функций.

Пример

Ввод

result = roman(10, 9)

Вывод

result = 'X + IX = XIX'

Ввод

result = roman(1499, 2500)

Вывод

result = 'MCDXCIX + MMD = MMMCMXCIX'

Решение

По большому счету задача на правильное использование словарей и небольшой смекалки.

Хитрость в том, чтобы задать не только “круглые” числа – 1000, 500, 100, 50, 10, 5, 1, но и “минус-числа” – 900, 400, 90, 40, 9, 4. Важно не забыть задать словарь так, чтобы все ключи шли по убыванию, и тогда все становится просто:

1) Перебираем наш словарь
2) Пока и если число больше ключа, записываем значение в строку и уменьшаем число на значение ключа.
3) Повторяем до тех пор пока число не станет равно нулю.

Посмотреть код

Решение

Python
def to_roman(n):
    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')
    ]
    
    result = ''
    for value, symbol in roman_values:
        while n >= value:
            result += symbol
            n -= value
    return result


def roman(a, b):
    roman_a = to_roman(a)
    roman_b = to_roman(b)
    roman_sum = to_roman(a + b)
    return f"{roman_a} + {roman_b} = {roman_sum}"
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии