How to add two numbers of any length in java?

后端 未结 8 1159
广开言路
广开言路 2020-12-06 01:20

How to add two numbers of any length in java?

Say for example, in java long size is 64 bit. So the maximum range is -9223372036854775808 to 9223372036854775807. Am i

8条回答
  •  攒了一身酷
    2020-12-06 01:51

    The BigInteger will let you work with numbers of any size, but you lose a considerable amount of performance over long or int.

    Actually, if you just need to run this operation once (user enters two numbers, and gets the result back), using BigInteger is fine. But if you need to perform the addition operation many times, you could use really your own implementation of big integer. When I was competing in ACM matches, we often used our own implementations based on char arrays (in C++). I suggest the following code. It is assumed that there are two arrays of integers, A and B. A[0] and B[0] store the lens of the corresponding numbers. A[i] and B[i] stores the digits themselves. A[1] and B[1] are the least significant digits. Therefore the number 1234 would correspond to such an array: {4,4,3,2,1}.

    Now, suppose we want to sum these numbers and store them in array C in the same format. Here is an example of code, that you could use:

    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;
    

    That code uses the simple rules of arithmetic addition and should work significantly faster than the BigInteger general implementation. Have fun with using that.

提交回复
热议问题