繁体   English   中英

将字符串转换为大整数?

[英]Convert string to a large integer?

我有一个任务(我认为这很常见),目的是开发一个LargeInteger类,该类可以使用..非常大的整数进行计算。

我显然根本不允许使用Java.math.bigeinteger类。

就在顶部,我被卡住了。 我需要从用户那里获取2个字符串(长数字),然后我将使用这些字符串来执行各种计算方法(加,除,乘等)。

谁能向我解释这应该如何工作的理论呢? 在我从用户那里获取了字符串之后(由于它太大而无法存储在int中),我是否应该将其分解成10位数字的长整数块(我认为10就是最大长整数,也许是9位?)

任何帮助表示赞赏。

首先,考虑一下存储数字的便捷数据结构。 考虑一下如何将N位数字存储到int[]数组中。

现在以加法为例。 您将如何添加两个N位数?

使用我们的小学加法,首先我们看两个数字最低有效位 (按标准符号,这将是最右边的位)。 然后将它们加起来。

因此,如果最右边的数字是78 ,我们将获得15 取此结果的最右边数字( 5 ),这是答案的最低有效数字。 1将结转到下一个计算。 因此,现在我们看第二个最低有效数字,并将它们与进位加在一起(如果没有进位,则为0 )。 并重复直到没有剩余数字可添加为止。

基本思想是将数字存储在某些数据结构中时,将如何手动将加,乘等转换为代码。

我将为您提供一些指导,说明我可能会执行类似的任务,但请让您了解详细信息。

  1. 看一下如何通过简单的电子加法器电路完成加法。 具体来说,他们使用小的加法块组合在一起。 这些校长会有所帮助。 具体来说,您可以添加块,只需记住从一个块继续到下一个块即可。
  2. 您将其分解为较小的博客的想法是一个很好的想法。 只要记住要正确的转换即可。 我怀疑9位数是正确的,用于结转等目的。

这些任务将帮助您进行加法和减法。 乘法和除法有点棘手,但还是有一些技巧。

  1. 乘法是较容易的任务,只需记住将一个数的每个块与另一个数相乘,然后携带零。
  2. 整数除法基本上可以像长除法一样进行,一次只能使用整个块。

我从未真正构建过这样的类,因此希望这里可以使用一些东西。

查看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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM