Задать вопрос

Как реализовать длинную арифметику?

Добрый день.

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

Но как быть, если в качестве основания выбрана степень двойки? Например 2^8.
На вход подается число, к примеру 123456789. С разбиением в ячейки массива не возникает проблем (младший индекс соответствует младшему разряду):
12345678 = 
--------------------------------
2^0     2^8     2^16    2^24
[21]    [205]   [91]    [7]


Но что-то я никак не пойму, как обратно в 10 систему счисления перевести, если имеется ограничение на максимальный числовой тип в ЯП (например, максимальное числовое значение может быть <= 2^16). Поэтому просто перевести из одной системы в другую не получится с помощью такого метода:
A_0 * 2^0 + A_1 * 2^8 + A_2 * 2^16 + ... + A_n * 2 ^ (n * 8)


Подскажите, пожалуйста, что я упускаю из вида? Насколько мне известно, в Python длинная арифметика реализована именно таким образом, что входное десятичное число преобразуется в строку из 0 и 1, а при выводе оно конвертируется обратно.
  • Вопрос задан
  • 1350 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Schullz
@Schullz
=^.^=
Можно при выводе сначала переводить из длинного числа по основанию 2 в длинное число по основанию 10
Ответ написан
@vilgeforce
Раздолбай и программист
Посмотрите на OpenSSL и как там все это реализовано. Заодно, может, не придется изобретать велосипед без нужды.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы