大数除以 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.
假设我有以下列表实现:
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.