我需要一个算法来对大数字执行算术运算(就像浮点数,双重int或任何其他数据类型一样)。我需要在C中编写代码。我试着在这里查找: Knuth,Donald,计算机程序设计的艺术,国际标准书号0-201-89684-2,第2卷:研究数值算法,第4.3.1节:经典算法但无法忍受。我只需要算法而不是代码。
答案 0 :(得分:3)
另外,据我所知,你不会比简单的线性O(n)算法好多了,即只是逐位加法。你可能还是必须阅读整个输入,所以它至少是线性的。你可以做各种技巧来使常数降低。
由于基本长乘法算法的二次性,你的主要问题是乘法。您可能想要考虑here给出的几种更快的方法之一。 Karatsuba方法实现起来有点棘手但可能是最简单的非平凡算法,可以为您带来收益。否则,您必须更多地了解快速傅里叶变换方法,例如Schönhage-Strassen's algorithm或Fürer's algorithm。
答案 1 :(得分:3)
我认为Karatsuba算法最适合对大数字进行算术运算。对于足够大的n,另一种推广,即Schönhage-Strassen算法,甚至更快。 您可以在中查找算法 Karatsuba 要么 Karatsuba_Multiplication
答案 2 :(得分:2)
没有算法可以对非常大的数字执行算术运算。算术运算保持不变。你需要的是像http://www.codeproject.com/KB/cs/BigInt.aspx
这样的课程答案 3 :(得分:1)
Riesel的书素数和计算机方法有一个附录,其中包含易于阅读的多精度算术代码。
答案 4 :(得分:0)
对于算法,请阅读Knuth vol 2或Crandall和Pomerance。对于编码,我建议先使用明显的算法,然后再进行Karatsuba或Fourier变换。