如何在java中添加任意长度的两个数字?

Man*_*noj 14 java math biginteger

如何在java中添加任意长度的两个数字?

比如说,在java中长度是64位.所以,最大范围-9223372036854775808到9223372036854775807是吗?

因此,如果我们想要添加一个比下面更大的数字,我得到一个错误

"整数太大"

长a = 9223372036854775807L;
长b = 9223372036854775808L;

在C中,我们可以把这些数字作为字符数组,通过各字符的地址遍历,并使用一些数据结构,我们可以添加任意大小的两个数字.

怎么做java.我们可以遍历String中每个字符的地址.


谢谢你的回复.

我试图通过将数字作为字符串传递并从末尾添加每个字符来进行编码.这对我来说可以.

有添加使用BigInteger和方法2个非常大的数字之间的任何大的差异,我上面指定(从临时变量端和存储剩余添加每个字符和变亮).BigInteger的基础机制是否与我的代码相同(从末尾添加每个字符)?

谢谢.

jjn*_*guy 20

你可以使用BigInteger.

BigInteger a = new BigInteger("9223372036854775807");
BigInteger b = new BigInteger("9223372036854775808");
BigInteger result = a.add(b);
Run Code Online (Sandbox Code Playgroud)

BigInteger让你与任何尺寸的数字工作,但你失去了相当数量的性能longint.


Gop*_*opi 6

使用BigInteger. 是一个例子.

示例代码(基于以上链接) -

BigInteger reallyBig1 = new BigInteger("1234567890123456890");
BigInteger reallyBig2 = new BigInteger("2743534343434361234");
reallyBig = reallyBig.add(reallyBig2);
Run Code Online (Sandbox Code Playgroud)


SPI*_*984 6

BigInteger让你与任何尺寸的数字工作,但你失去了相当数量的性能longint.

实际上,如果你只需要运行一次这个操作(用户输入两个数字,然后得到结果),使用BigInteger就可以了.但是如果你需要多次执行加法运算,你可以使用你自己的大整数实现.当我参加ACM比赛时,我们经常使用我们自己的基于char数组的实现(在C++中).我建议使用以下代码.假设有两个整数数组,A和B.A [0]B [0]存储相应数字的镜头.A [i]B [i]存储数字本身.A [1]B [1]是最低有效数字.因此,数字1234将对应于这样的阵列:{4,4,3,2,1}.

现在,假设我们想要将这些数字相加并将它们以相同的格式存储在数组C中.以下是您可以使用的代码示例:

int len1 = A[0],  len2 = B[0], divisor = 0;
int len = len1 >= len2 ? len1 : len2;
for (int i=1;i<=len;i++) {
  if (i>len1) C[i] = B[i]+divisor;
  else if (i>len2) C[i] = A[i]+divisor;
  else C[i] = A[i]+B[i]+divisor;
  divisor = C[i]/10;
  C[i] %= 10;
}
while (divisor>0) {
  C[++len] = divisor%10;
  divisor /= 10;
}
C[0] = len;
Run Code Online (Sandbox Code Playgroud)

该代码使用简单的算术加法规则,并且应该比BigInteger一般实现快得多.使用它玩得开心.


Sam*_*Day 3

看看BigInteger班级吧 它将能够对非常大的数字执行您正在寻找的操作。

http://download.oracle.com/javase/1.4.2/docs/api/java/math/BigInteger.html