В качестве необязательного задания я думаю о написании собственной реализации класса BigInteger, где я предоставлю свои методы сложения, вычитания, умножения и т.д.
Это будет для произвольно длинных целых чисел, даже сотен цифр.
Выполняя математику с этими числами, цифра за цифрой несложна, как вы думаете, какая структура данных будет лучшей для представления моего «BigInteger»?
Сначала я рассматривал возможность использования массива, но потом подумал, что потенциально могу переполниться (исчерпать слоты массива) после большого сложения или умножения. Будет ли это хорошим случаем для использования связанного списка, поскольку я могу добавлять цифры с временной сложностью O (1)?
Есть ли какая-то другая структура данных, которая подошла бы еще лучше, чем связанный список? Должен ли тип, который хранится в моей структуре данных, быть наименьшим возможным целочисленным типом, доступным мне?
Кроме того, должен ли я быть осторожным с тем, как я храню свою переменную переноса? Должен ли он сам быть моего типа «BigInteger»?
int
), вы будете работать быстро. Так что это зависит от того, что вас больше всего беспокоит. Очевидная возможность — сделать целочисленный тип параметром шаблона вашего класса. (c) Проверьте библиотеку GNU MP, вы не ошибетесь, если скопируете некоторые из их дизайнерских решений. - person Manuel   schedule 08.02.2010