Деление большого числа на 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.