Сложение очень больших целых чисел

Складывайте десятичные цифры справа налево с переносом. Для разных знаков вычитайте меньший модуль из большего и сохраняйте знак большего модуля.

Короткий ответ

Что ответить на собеседовании

Складывайте десятичные цифры справа налево с переносом. Для разных знаков вычитайте меньший модуль из большего и сохраняйте знак большего модуля.

Подробный разбор

Ответ с пояснениями

Условие

Ввод состоит из двух огромных целых чисел, которые нельзя разместить в стандартных целочисленных типах языка, поэтому они передаются как строки. Требуется написать функцию, реализующую сложение этих двух чисел, представленных строками.

Ответ

Складывайте десятичные цифры справа налево с переносом. Для разных знаков вычитайте меньший модуль из большего и сохраняйте знак большего модуля.

Базовое сложение неотрицательных чисел без преобразования всей строки в int:

def add_magnitudes(a, b):
    if not a or not b or any(c not in '0123456789' for c in a + b):
        raise ValueError('Ожидались десятичные цифры')
    i, j, carry = len(a) - 1, len(b) - 1, 0
    result = []
    while i >= 0 or j >= 0 or carry:
        total = carry
        if i >= 0:
            total += ord(a[i]) - ord('0')
            i -= 1
        if j >= 0:
            total += ord(b[j]) - ord('0')
            j -= 1
        carry, digit = divmod(total, 10)
        result.append(str(digit))
    return ''.join(reversed(result)).lstrip('0') or '0'

Для знаковых строк сначала отделите +/- и ведущие нули. При одинаковых знаках используйте сложение модулей. При разных сравните модули по длине и лексикографически, затем вычтите меньший справа налево с заёмом; знак берётся у большего. Нулевой результат всегда нормализуется в '0'. Время и память — O(max(n, m)).

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее