E5. Длинная арифметика: сложение-вычитание-умножение-деление-извлечение корня (Глеб Лобанов)

YOUTUBE · 19.11.2025 09:39

Ключевые темы и таймкоды

Введение в длинную арифметику

0:01
  • Лекция посвящена длинной арифметике, которая используется для работы с большими числами.
  • В питоне для этого используется модуль "fractions", а на C++ можно реализовать вручную.

Структура и класс C++

2:22
  • В C++ используются структуры и классы для работы с большими числами.
  • Структура имеет публичный доступ к полям, а класс - приватный.

Реализация длинной арифметики

7:48
  • В C++ можно использовать массив или вектор для хранения чисел.
  • Вторая запись чисел лучше, так как позволяет складывать и вычитать числа по разрядам.
  • Для вывода числа используется функция reverse_iterator.

Подключение библиотек

14:36
  • Для работы с большими числами можно использовать библиотеку "bitset".
  • Она подключается автоматически при компиляции и работает только на GNU.

Введение в программирование

15:35
  • Автор объясняет, как работает код, используя различные функции и структуры.
  • Он также объясняет, что такое "конст" и почему важно использовать его в определенных местах кода.

Вопросы и ответы

17:46
  • Автор отвечает на вопросы зрителей о том, что такое "конст", "паблик" и "приват".
  • Он также объясняет, почему некоторые поля должны быть "публичными" или "приватными".

Обсуждение кода

21:57
  • Автор объясняет, что такое "конструктор" и как он используется в данном коде.
  • Он также обсуждает, почему важно форматировать вывод чисел и какие операции и сравнения хотелось бы иметь в числе.

Сложение двух чисел

25:10
  • Объяснение процесса сложения двух чисел с использованием структуры и функции.
  • Обсуждение использования ссылок и векторов для оптимизации памяти.

Проблемы с функцией суммы

36:05
  • Функция доступна только внутри структуры, что может быть проблемой.
  • Обсуждение идеи дружественных функций и их использования для реализации сложных операций.

Вынесение функции плюс за пределы структуры

40:43
  • Объяснение необходимости выноса функции плюс за пределы структуры для реализации сложных операций.
  • Обсуждение преимуществ дружественных функций для реализации пользовательских операций.

Обсуждение структуры и функций

42:41
  • Обсуждение структуры, которая должна быть "черным ящиком" и не должна быть доступна для прямого доступа.
  • Обсуждение возможности переопределения функций и методов в структуре.

Автоматическое преобразование

51:58
  • Обсуждение возможности автоматического преобразования типов в C.
  • Обсуждение использования стандартных классов больших чисел в C++.

Вычитание без возвращаемого значения

55:43
  • Обсуждение работы с большими числами без отражательных чисел.
  • Вычитание чисел с использованием большего разряда.

Обсуждение умножения и деления

59:25
  • Автор объясняет, что умножение и деление на ноль не допускается, так как результат будет отрицательным.
  • Он также обсуждает, как можно использовать цикл для выполнения сложения в столбик.

Бинарное умножение

1:08:11
  • Автор объясняет, что бинарное умножение - это умножение двух чисел, каждое из которых представлено в двоичной форме.
  • Он приводит пример умножения двух чисел, используя цикл для сложения в столбик.

Разложение числа на разряды

1:10:07
  • Автор объясняет, что число можно разложить на ноль умножить на п в степени ноль плюс на один умножить на п в степени один.
  • Он также упоминает, что человечество до сих пор не знает, как выполнить бинарное умножение для больших чисел.

Умножение в двоичной системе счисления

1:12:41
  • Объясняется, что умножение в двоичной системе счисления - это перемножение чисел, где каждый разряд умножается на соответствующий разряд другого числа.
  • Приводится пример умножения числа 100 на 101.

Деление в двоичной системе счисления

1:24:12
  • Обсуждается алгоритм деления в двоичной системе счисления, основанный на переборе возможных значений делителя.
  • Объясняется, как реализовать меньше и равно в двоичной системе счисления.

Реализация алгоритма деления

1:29:11
  • Реализуется алгоритм деления в двоичной системе счисления на примере деления числа 1024 на 7.
  • Обсуждаются сложности реализации и возможные оптимизации.

Сравнение и деление

1:34:28
  • Обсуждение сравнения чисел и деления.
  • Ответы на вопросы о делении и делении с остатком.

Наибольший икс и итераторы

1:36:25
  • Обсуждение итераторов и указателей.
  • Ответы на вопросы о равенстве итераторов и элементов, на которые они указывают.

Симптоматика и время работы

1:38:27
  • Обсуждение времени работы и сравнения питона и плюсов.
  • Вывод о том, что питон быстрее в умножении, но плюсы быстрее в нормальном умножении.
  • Обсуждение использования умножения в делении и взятии корня.