BigInteger的Java解决方法

时间:2010-01-07 17:32:34

标签: java biginteger substitution

我正在开发一个场景,其中我必须在Java中实现BODMAS,操作数可能有多达1000个数字。所以我选择以下面的方式实现它 - 我将中缀表达式(将在其上实现BODMAS的表达式)转换为后缀 然后我通过解析它拥有的每个BigInteger来评估后缀表达式。 我在这个实现中取得了成功。

现在我知道我不能使用BigInteger并且必须处理基本数据类型,如int,string等。

我一直在思考如何做到这一点,坦率地说,没有取得任何重大进展。

有关如何使用基本数据类型实现BigInteger的任何帮助或建议都会有很大帮助。

2 个答案:

答案 0 :(得分:2)

实现大整数的一种简单方法是将它们存储为十进制数字数组,例如。 1234可以表示为:

int[] bignum = new int[] {1, 2, 3, 4};

您需要实现手写加法,减法,乘法,除法以及其他任何需要的东西。

您可能会发现将数字“反转”存储可能会更容易,因此请将1234存储为:

int[] bignum = new int[] {4, 3, 2, 1};

更高级的实现将使用base 2 ^ 32或比base 10大得多的东西。

答案 1 :(得分:2)

以下是Open JDK中BigInteger的免费实现。它被GPL2覆盖(这是一个问题吗?)

即使您无法复制和粘贴它,您也可以了解如何在int []数组中存储和操作这些位。

替代方案可能是来自CERN的colt库。至少它可以处理巨大的位域。

修改

在找到BODMAS的含义后(认为它是一个密码算法或其他东西,必须在一个特殊的和有限的JDK上完成;-))),我猜小马的建议是不合适的;)

我不删除这个答案,即使现在我认为,p1NG对使用(或重新实现)BigInteger没有“合法”限制......