Программа курса:

1.1 - Часть 1 1.2 - Часть 2 1.3 - Часть 3 1.4 - Часть 4 1.5 - Часть 5 1.6 - Часть 6 1.7 - Часть 7 1.8 - Часть 8 1.9 - Часть 9 1.10 - Часть 10 1.11 - Часть 11 1.12 - Часть 12
2.1 - Часть 1 2.2 - Часть 2 2.3 - Часть 3 2.4 - Часть 4 2.5 - Часть 5 2.6 - Часть 6
3.1 - Часть 1

Разбор задачи: Преобразование римского числа в целое число

Предложенный нами код решения: 

def roman_to_int(s):
    # Создаем словарь для значений римских символов
    roman_values = {
        'I': 1, 'V': 5, 'X': 10, 'L': 50,
        'C': 100, 'D': 500, 'M': 1000
    }

    total = 0
    prev_value = 0

    # Проходим по символам строки справа налево
    for char in reversed(s):
        current_value = roman_values[char]

        # Если текущий символ меньше предыдущего, вычитаем его значение
        if current_value < prev_value:
            total -= current_value
        else:
            total += current_value

        # Обновляем значение предыдущего символа
        prev_value = current_value

    return total
  1. Создание словаря значений римских символов:

    roman_values = {
        'I': 1, 'V': 5, 'X': 10, 'L': 50,
        'C': 100, 'D': 500, 'M': 1000
    }
    
    • В этом словаре каждый символ римской системы счисления сопоставляется с его численным значением.
    • Это позволяет легко находить численное значение символа.
  2. Инициализация переменных:

    total = 0
    prev_value = 0
    
    • total используется для накопления результата.
    • prev_value хранит значение предыдущего символа для определения вычитания.
  3. Цикл по символам строки:

    for char in reversed(s):
    
    • Цикл идет справа налево, поскольку в римских числах символы меньшего значения могут находиться перед большими для обозначения вычитания (например, IV, где I вычитается из V).
  4. Получение значения текущего символа:

    current_value = roman_values[char]
    
  5. Определение вычитания или сложения:

    if current_value < prev_value:
        total -= current_value
    else:
        total += current_value
    
    • Если текущий символ (current_value) меньше предыдущего (prev_value), это означает, что значение символа нужно вычесть (например, IV).
    • Иначе символ добавляется к результату.
  6. Обновление значения предыдущего символа:

    prev_value = current_value
    
    • Для следующей итерации обновляется значение предыдущего символа, чтобы правильно обработать следующий символ строки.
  7. Возврат результата:

    return total
    
    • После завершения цикла возвращается итоговая сумма.

Примеры работы функции

  1. Ввод: "III":
    • Суммируются значения 1 + 1 + 1 = 3.
    • Результат: 3.
  2. Ввод: "LVIII":
    • Складываются значения L (50) + V (5) + III (3) = 58.
    • Результат: 58.
  3. Ввод: "MCMXCIV":
    • Разбор:
      • M = 1000
      • CM = 900 (вычитание: 1000 - 100)
      • XC = 90 (вычитание: 100 - 10)
      • IV = 4 (вычитание: 5 - 1)
    • Сумма: 1000 + 900 + 90 + 4 = 1994.
    • Результат: 1994.
  4. Ввод: "IX":
    • Вычитание: 10 - 1 = 9.
    • Результат: 9.
  5. Ввод: "CDXLIV":
    • Разбор:
      • CD = 400 (вычитание: 500 - 100)
      • XL = 40 (вычитание: 50 - 10)
      • IV = 4 (вычитание: 5 - 1)
    • Сумма: 400 + 40 + 4 = 444.
    • Результат: 444.

 

Перейти к следующему шагу

Возникли вопросы при прочтении лекции? Задайте вопрос в комментариях

Комментарии