---
round: 1
ticket_no: 13
source_no: 32
slug: multiply-strings
topic: Math / String
difficulty: Medium
leetcode_id: 43
attempted: true
score: 2
verdict: partial
reviewed_at: 2026-09-12
---

# Билет 13 — Multiply Strings

## Условие (как предъявлено)

Даны две строки `num1` и `num2`, представляющие неотрицательные целые числа. Нужно перемножить их без использования BigInteger и без прямого преобразования строк в Integer; вернуть произведение в виде строки.

```
Input:  num1 = "2",   num2 = "3"    →  "6"
Input:  num1 = "123", num2 = "456"  →  "56088"
```

Constraints: `1 <= length <= 200`.

## Ответ

> Здесь используется идея умножения в столбик. То есть мы, получается, ставим одно число под другим. Берём первое число, первую цифру на самую правую, вот с нижнего, и начинаем на верхнюю умножать. То есть там умножаем по цифре на, сохраняем остаток, вот, и там, короче, после умножения тоже прибавляем его. У нас накапливается после каждого умножения, после каждой цифры умножения появляется новое число в виде строки. А дальше мы их в столбик складываем. То есть одно под другим, также у нас можно по очереди сложить. То есть первое вторым, потом полученный результат с третьим, полученный результат с четвёртым и так далее. То есть тоже сложение получается в столбик. Сдвиг надо учесть. Там получается, что самое первое число оно как бы справа стоит. Ну а чуть ниже их надо дополнять нужным числом налей.Вот, ну и еще сказать, что так у нас десятичная система, то мы остаток о деления на 10. Получается, сейчас скажу, разделить шестнадцать на десять.

## Разбор

**Что верно:** умножение столбиком: умножение каждой цифры на каждую, перенос, учёт сдвига разрядов, сложение частичных произведений — верное направление.

**Что упущено и ошибки:** выбран более громоздкий вариант (частичные произведения как строки и их сложение) вместо единого массива результата длиной n + m, где произведение цифр i и j ложится в позиции i+j+1 и i+j. Не проговорены ведущие нули и что «0» × «0» = «0». Сложность O(n·m) не названа.

**Эталонная идея:** res = Array.new(n + m, 0); двойной цикл с конца: p = d1*d2 + res[i+j+1]; res[i+j+1] = p % 10; res[i+j] += p / 10; join и отбросить ведущие нули.

**Сложность:** время O(n·m), память O(n + m)

**Критерии:** идея ✅ · структура данных ⚠️ · сложность ❌ · граничные случаи ⚠️


**Разбор задачи:** [`../../algo-solutions/02-extra/06-math-string-simulation/32-multiply-strings.md`](../../algo-solutions/02-extra/06-math-string-simulation/32-multiply-strings.md)
