让我们说我有以下列表实现:
list=^listelement
listelement=record
w:integer;
next:list;
end;
,列表代表一个十进制的大数字 (列表1 - > 2 - > 3表示数字123)。
我想要做的是将这样的数字转换为二进制表示。因此,最直接的方法是将数字除以2
问题是我很难通过2算法实现除法。我理解这个基本算法 https://www.mathsisfun.com/long_division.html,但我无法想出将其转换为代码的方法
我很感激一些帮助
答案 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.