Молодогвардейцев 454015 Россия, Челябинская область, город Челябинск 89085842764
MindHalls logo

Операторы сравнения больших чисел — реализация на C/C++

Приветствую всех, это вторая статья из серии про реализацию больших чисел на языке C/C++. В прошлый раз я рассказывал про общую структуру класса BigNumber и способ хранения большого числа в памяти. Были реализованы функции нормирования большого числа для печати и две арифметические операции: сложение и вычитание.

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

В прошлый раз я обещал, что следующим шагом станет реализация деления и умножения больших чисел, но потом понял, что они не выполнимы без возможности сравнивать два числа. Кроме того, большинство алгоритмов отпадает без этого функционала. Поэтому в этот раз я приведу реализации всех операторов сравнения: ==, !=, >, >=, <, <=.

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

Реализация операторов сравнения больших чисел

Что у нас есть для того, чтобы сравнить два больших числа? Только их знаки, размеры чанок и значения чисел в самих чанках. И этого нам будет достаточно. Алгоритм любого оператора будет строится следующим образом.

  1. Нормализовать оба числа и привести их к максимально удобоваримому виду;
  2. Далее смотрим знаки чисел и делим алгоритм на две ветки: если знаки равны и если не равны;
  3. Дальнейшие действия зависят от оператора, иногда можно сразу сделать вывод, если нет, то смотрим размер числа;
  4. Если и по размеру чисел не удалось сделать вывод, то сравниваем чанки по значениям.

Исходный код операторов сравнения

Для начала я покажу, как должны выглядеть объявления операторов в самом классе BigNumber.

Начнем с самых простых в реализации: == и !=.

Исходный код операторов == и !=

Исходный код операторов < и <=

Исходный код операторов > и >=

Заключение

Вот собственно и все, в следующий раз уже точно будут реализации деления и умножения, спасибо за внимание!