Деление большого числа на 2

Допустим, у меня есть следующая реализация списка:

list=^listelement
listelement=record
    w:integer;
    next:list;
end;

и список представляет большое число, записанное в десятичном виде (список 1 -> 2 -> 3 представляет число 123).

Что я хочу сделать, это преобразовать такое число в двоичное представление. Итак, самый простой способ сделать это - разделить число на 2.

Проблема в том, что мне трудно реализовать алгоритм деления на 2. Я понимаю основные алгоритмы, такие как этот https://www.mathsisfun.com/long_division.html, но я не могу придумать, как перевести это в код

Буду признателен за помощь

1 ответ

Решение

Вы продолжите слева направо, разделив цифры на две. Каждый раз, когда цифра нечетная, вы будете передавать перенос (10) до следующей цифры.

Пример: делим 123

1, деленное на 2 - это 0, перенос = 10

2 + 10, деленное на 2 - это 6, нет переноса

3, деленное на 2 - это 1, перенос = 10

Последний перенос может быть проигнорирован.

Результат: 061.

carry= 0;
element= head;
WHILE element <> NIL DO
  BEGIN
    element^.w= element^.w + carry;
    IF ODD(element^.w) THEN carry= 10 ELSE carry= 0;
    element^.w= element^.w DIV 2;
    element= element^.next
  END.
Другие вопросы по тегам