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.