Я пытаюсь реализовать свою собственную версию метода add() из класса BigInteger. До сих пор он отлично работает при задании двух чисел одинаковой длины, но он не может скомпилировать (индексировать за пределы) при задании двух чисел разной длины. Какой был бы лучший способ решить эту проблему?Реализация BigInt.add()?
Если это поможет, то выход, когда два значения, вставленные в 10 и 1 составляет 20.
public BigInt add(BigInt b) {
int[] ans = new int[value.length];
int carry=0;
if(this.lessThan(b))
for(int i=b.value.length-1;i>=0;i--){
int result=this.value[i]+b.value[i]+carry;
carry=result/10;
result%=10;
ans[i]=result;
}
else
for(int i=this.value.length-1;i>=0;i--){
int result=this.value[i]+b.value[i]+carry;
carry=result/10;
result%=10;
ans[i]=result;
}
String ANSsz=convertArrayToString(ans);
BigInt Sum = new BigInt(ANSsz);
return Sum;
}
Попробуйте заполнить номера так, чтобы они были одинаковой длины. –
Я бы основал Bigint на 'int []', который используется для хранения 32-битных значений без знака. Это было бы намного более эффективно, поскольку вся цель - хранить большие числа. –
У вас возникла проблема, если решение больше, чем два добавленных значения. ('ans' может быть длиной length + 1 в длину) –