将大数除以2

时间:2015-01-03 16:12:18

标签: algorithm pascal integer-division largenumber

让我们说我有以下列表实现:

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

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

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

问题是我很难通过2算法实现除法。我理解这个基本算法 https://www.mathsisfun.com/long_division.html,但我无法想出将其转换为代码的方法

我很感激一些帮助

1 个答案:

答案 0 :(得分:5)

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

示例:除 123

1 除以2是 0 ,carry = 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.