Манипулирование с целыми числами произвольной длины
Операция бинарный — определена через унарный минус и бинарный плюс.
Операция * производится по технологии, аналогичной умножению в столбик. При этом все действия ведутся в системе счисления с основанием 100. Длина массива результата может быть равна либо сумме длин операндов, либо этой сумме минус 1. Эта ситуация аналогична той, которая была при сложении чисел с одинаковым знаком, и здесь тоже не делается оптимизации.
Операция << - просто операция вывода класса OSTREAM, определенная для класса UNLIM. Сначала она выводит '-' если знак числа отрицательный, а затем само число поразрядно (по десятичным разрядам), начиная со старшего. При этом используется функция digit (number), которая возвращает значение десятичного разряда с номером number.
Функция- конструктор unlim (char*) обрабатывает инициализацию символьной строкой. При этом распознаются следующие ошибочные ситуации: инициализация пустой строкой; недопустимый символ в строке; строка содержит знак, но не содержит значения. Во всех этих случаях число инициализируется нулем.
Функция- конструктор unlim (unlim&) обрабатывает инициализацию другим объектом класса UNLIM.
Отчет тестовой программы
Проверка работы конструкторов:
Без инициализации:
unlim a;
a=0
Инициализация строкой:
unlim b="123″
b=123
unlim c="-123″
c=-123
unlim d="+123″
d=123
unlim e="+" Unlim class error: Sign without value. Value=0
e=0
unlim f="-" Unlim class error: Sign without value. Value=0
f=0
unlim g="aaa" Unlim class error: Not digit symbol in string. String ignored. Value=0
g=0
unlim h="4a123″ Unlim class error: Not digit symbol in string. String ignored. Value=0