Я пишу программу для добавления больших чисел, но без использования BigInteger. Однако у меня проблема с длинным дополнением.Очень большие числа в Java - длинное дополнение
int l = this.arr.length > arg.arr.length ? this.arr.length : arg.arr.length;
byte[] result = new byte[l];
byte carry = 0;
for(int i = 0; i < result.length; i++){
byte sum;
try{
sum = (byte) (this.arr[i] + arg.arr[i] + carry);
}
catch(ArrayIndexOutOfBoundsException e){
try{
sum = (byte) (this.arr[i] + carry);
}
catch(ArrayIndexOutOfBoundsException ex){
sum = (byte) (arg.arr[i] + carry);
}
}
//carry
if(sum > 9){
result[i] = (byte) (sum % 10);
carry = 1;
}
else{
result[i] = sum;
carry = 0;
}
}
if(carry > 0){
byte[] tmp = new byte[l+1];
System.arraycopy(result, 0, tmp, 0, l);
tmp[tmp.length - 1] = carry;
result = tmp;
}
Так сложить два числа я использую Try-улов в два раза, чтобы проверить, есть ли какие-либо цифры остаются в одном из массивов. Метод работает отлично, но эта вещь-попытка не выглядит такой приятной. Могу ли я сделать это любым другим способом?
Пожалуйста, не используйте исключения для проверки границ. Я бы использовал 'int []' с 32-битными значениями (как и BigInteger) вместо 'byte [0]' с десятичной запятой, когда вы получили возможность изменить его. –