大数除以 2

Dividing a large number by 2

假设我有以下列表实现:

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

而一个列表代表一个很大的十进制数 (列表 1 -> 2 -> 3 表示数字 123)。

我想做的就是把这样的数转换成二进制表示。因此,最简单的方法是将数字除以 2

问题是我很难实现除以 2 算法。我了解基本算法,例如这个 https://www.mathsisfun.com/long_division.html,但我想不出将其转化为代码的方法

我希望得到一些帮助

您将从左到右将数字除以二。每次数字为奇数时,您都会将进位 (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.