2012-09-02 16 views
1

我只是想知道在处理大数字时有什么不同的分割策略。大数字,我的意思是〜50位数字。真的很大数字的分部

例如 9237639100273856744937827364095876289200667937278/8263744826271827396629934467882946252671

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

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

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

+3

你可以只使用Python(1117851445),或者你可以具体谈谈在上下文你想解决这个问题。 –

+0

如果您对分割算法感兴趣,可以免费下载[现代计算机算术](http://www.loria.fr/~zimmerma/mca/pub226.html)中介绍的几种方法。我承认它可能有点慢,但那里有很多好的信息。 – DSM

回答

2

你使用什么语言/平台?这很可能已经解决了,因此您不需要从头开始实施它。例如。哈斯克尔有Integer类型,Java中的java.math.BigInteger类,.NET的System.Numerics.BigInteger结构等

如果您的问题真的是一个理论上的一个,我建议你阅读克努特,计算机程序设计,第2卷,第4.3节的艺术。 1。你在找什么叫做“算法D”。下面是算法的C实现用一个简短的说明一起: http://hackers-delight.org.ua/059.htm

+0

我使用Obj-c,但我试图创建自己的实现,而不是使用预先存在的实现 感谢您提及Knuth,您知道是否有方法在线阅读该节,或者我需要去图书馆吗? – Mirror318

+0

您可能会在Google书籍上运气(在本书的算法从第273页开始)。但是,如果你只是搜索: - 第十章“算法d” - 你会发现一些例子和解释,如我在上面的链接中的一个。 – Tilo

+0

第二个想法:如果你从来没有阅读过Knuth,请先看网页。例如,Kunth使用伪汇编而不是您习惯于其他算法书籍的伪代码。 – Tilo

1

Long division如果您使用数字的二进制表示形式并且可能是最有效的算法,则不是很复杂。

-1

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

由于LN(A/B)= LN(一)-ln(b)中,为了计算A/B,你需要:
LN计算的(a)和ln(b)中[通过库函数,对数表或其他方法]
substruct他们:TEMP = LN(一)-lb(b)
计算指数e ^临时

+0

我需要一个确切的结果:\ 虽然我可以砍掉小数/余数,但我需要精确的数字四舍五入到最接近的整数 – Mirror318

+0

Whell,在数学上它是确切的,买问题是ln(a)abd ln(b)必须四舍五入。 – LeeNeverGup

+0

在你的例子中,实际结果是1117851445. ln(a)接近112.747,ln(b)接近91.912。 e ^差值给出1118215558.点后的5位数字的相同过程给出1117857786,点后9位给出实际结果。 – LeeNeverGup