将大数除以2

Jyt*_*tug 2 algorithm pascal largenumber integer-division

假设我有以下列表实现:

list=^listelement
listelement=record
    w:integer;
    next:list;
end;
Run Code Online (Sandbox Code Playgroud)

列表表示十进制写的大数(列表1 - > 2 - > 3表示数字123).

我想要做的是将这样的数字转换为二进制表示.因此,最直接的方法是将数字除以2

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

我将不胜感激

Yve*_*ust 5

您将从左到右继续,将数字除以2.每次数字为奇数时,您都会将进位(10)传播到下一个数字.

示例:除以123

1除以2为0,进位= 10

2 + 10除以2是6,没有携带

3除以2是1,carry = 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.
Run Code Online (Sandbox Code Playgroud)