大整数算术

时间:2014-02-04 06:30:46

标签: c biginteger integer-arithmetic

我想知道用于对C中的非常大的整数执行算术运算的不同技术。我知道的是使用字符串来保存数字并为其定义操作add,subtract等。我对使用库不感兴趣,这个问题纯粹是为了知识。请建议使用任何其他此类方法/技术。

2 个答案:

答案 0 :(得分:3)

你可以将表示整数的低级别作为一个字节数组,并在字级别执行所有操作(如加法,减法,乘法,除法或比较),就像CPU一样。

最简单的算法用于加法和减法,您可以根据需要简单地按顺序加上或减去数字。

负数可以用2的补码表示。

为了进行比较,您只需比较高位数字,直到找到差异。

对于乘法,您可以实现的最简单的算法(和最慢的)是重复添加。

对于除法,事情比乘法更复杂,请参阅:http://en.wikipedia.org/wiki/Division_algorithm

一个常见的应用是公钥加密,其算法通常采用具有数百个数字的整数算法。

检查OpenSSL BIGNUM文档:https://www.openssl.org/docs/crypto/bn.html

答案 1 :(得分:1)

您可以使用3个链接列表,一个用于编号A,一个用于编号B,一个用于结果。

然后,您将读取每个数字作为用户输入的字符,使其成为整数并将其保存到列表中的新节点,与您此刻读取的数字相对应。

最后你只需要编写函数来添加,减去等操作。 在每个中你将遵循你在学校学到的各自算法,从LSB节点开始,一直到MSB节点,始终牢记每个数字的基本功率(1个节点* 10 ^ 0,2节点* 10 ^ 1 ,3节点* 10 ^ 2,...,n节点* 10 ^ n)。