1

我只是想知道在处理大数字时有哪些不同的除法策略。通过大数字,我的意思是〜50位数字。

例如 9237639100273856744937827364095876289200667937278 / 8263744826271827396629934467882946252671

当两个数字都很大时,长除法似乎失去了它的用处......

我认为一种可能性是通过除数的乘法来计算,直到你超过被除数,但如果它是上面示例中的被除数除以一个小数字,例如 4,那么这就是大量的计算。

那么,有没有简单、干净的方法来做到这一点?

4

3 回答 3

2

您使用什么语言/平台?这很可能已经解决,因此您无需从头开始实施。例如 Haskell 有Integer类型,Java 有java.math.BigInteger类,.NET 有System.Numerics.BigInteger结构,等等。

如果您的问题真的是理论上的问题,我建议您阅读 Knuth,计算机编程的艺术,第 2 卷,第 4.3.1 节。您正在寻找的东西在那里被称为“算法D”。这是该算法的 C 实现以及简短说明: http ://hackers-delight.org.ua/059.htm

于 2012-09-02T06:51:17.467 回答
1

如果您正在使用数字的二进制表示并且可能是最有效的算法,那么长除法并不是很复杂。

于 2012-09-02T06:50:38.327 回答
-1

如果您不需要非常精确的结果,则可以使用对数和指数。指数是函数 f(x)=e^x,其中 e 是一个数学常数,等于 2.71828182845...
对数(用 ln 标记)是指数的倒数。

由于 ln(a/b)=ln(a)-ln(b),要计算 a/b,您需要:
计算 ln(a) 和 ln(b) [通过库函数、对数表或其他方法] 对
它们进行子结构: temp=ln(a)-lb(b)
计算指数 e^temp

于 2012-09-02T06:52:24.003 回答