[英]Convert string to a large integer?
我有一个任务(我认为这很常见),目的是开发一个LargeInteger类,该类可以使用..非常大的整数进行计算。
我显然根本不允许使用Java.math.bigeinteger
类。
就在顶部,我被卡住了。 我需要从用户那里获取2个字符串(长数字),然后我将使用这些字符串来执行各种计算方法(加,除,乘等)。
谁能向我解释这应该如何工作的理论呢? 在我从用户那里获取了字符串之后(由于它太大而无法存储在int中),我是否应该将其分解成10位数字的长整数块(我认为10就是最大长整数,也许是9位?)
任何帮助表示赞赏。
首先,考虑一下存储数字的便捷数据结构。 考虑一下如何将N
位数字存储到int[]
数组中。
现在以加法为例。 您将如何添加两个N
位数?
使用我们的小学加法,首先我们看两个数字的最低有效位 (按标准符号,这将是最右边的位)。 然后将它们加起来。
因此,如果最右边的数字是7
和8
,我们将获得15
。 取此结果的最右边数字( 5
),这是答案的最低有效数字。 1
将结转到下一个计算。 因此,现在我们看第二个最低有效数字,并将它们与进位加在一起(如果没有进位,则为0
)。 并重复直到没有剩余数字可添加为止。
基本思想是将数字存储在某些数据结构中时,将如何手动将加,乘等转换为代码。
我将为您提供一些指导,说明我可能会执行类似的任务,但请让您了解详细信息。
这些任务将帮助您进行加法和减法。 乘法和除法有点棘手,但还是有一些技巧。
我从未真正构建过这样的类,因此希望这里可以使用一些东西。
查看Michael Bromberger的MPI 1.8.6的源代码(C库)。 它为bignum和简单的算法使用简单的数据结构。 它是C,不是Java,而是简单易懂的代码。
它的除法性能很差(并且导致非常大的bignums到tex的缓慢转换),但是您可以遵循代码。
有一个函数mpi_read_radix
可以读取带有可选的前导+/-号的任意基数(最高为36,其中Z为35)的数字,并产生一个bignum。
我最近为编程语言解释器选择了该代码,因为尽管它不是执行速度最快,也不是最完整的代码,但是它很容易被黑客入侵。 我已经能够自己将平方根重写为一个更快的版本,将影响端口的一些编码错误修复为64位数字,并添加了我需要的一些缺少的操作。 另外,许可与BSD兼容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.