将一个大数除以 2
Posted
技术标签:
【中文标题】将一个大数除以 2【英文标题】:Dividing a large number by 2 【发布时间】:2015-01-03 16:12:18 【问题描述】:假设我有以下列表的实现:
list=^listelement
listelement=record
w:integer;
next:list;
end;
而一个列表表示一个以十进制书写的大数 (列表 1 -> 2 -> 3 代表数字 123)。
我想做的是将这样的数字转换为二进制表示。因此,最简单的方法是将数字除以 2
问题是我很难实现除以 2 算法。我了解诸如此类的基本算法 https://www.mathsisfun.com/long_division.html,但我想不出办法将其转换为代码
我会很感激一些帮助
【问题讨论】:
根据您选择的二进制表示形式,在二进制中工作并计算 (1 * 10 + 2) * 10 + 3 可能更容易 【参考方案1】:您将从左到右进行,将数字除以二。每次一个数字是奇数时,您都会将进位 (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.
【讨论】:
以上是关于将一个大数除以 2的主要内容,如果未能解决你的问题,请参考以下文章