这个加法步骤跟我们纸上的加法是一样的 ,
1.首先我们声明一个数组,它的大小是我们String(存储BigInteger)的长度 ;
2.然后把String 倒过来写因为加法我们从最低比特开始加;
3.我们每次加两个数字时要判断是否大于9
4.如果是那么把第一个bit给carry变量,第二个存储数组里面
例子:如果是9+1 那么carry 变量存储1 数组存储 0
然后下次加两个元素是把carry的值也加上
5.如果不是
那么简单的把答案存储到数组里面
比如 2+4 不需要carry 变量来存储一个数;
当然也有一些情况要判断,比如一个String是空的那么不需要加;
直接把答案给期中不为空的String
public String add(MyBigInteger second){
int tmpSize = this.SIZE+second.SIZE,actualSize = 0;
int []tmp = new int[tmpSize];
if(this.SIZE==0){
return Arrays.toString(second.arr);
}else if(second.SIZE==0)
return Arrays.toString(this.arr);
else
{
int carry = 0,i;
for(i = 0;i<this.SIZE&&i< second.SIZE;i++){
int sum = this.arr[i]+second.arr[i];
sum+=carry;
String tm = "";
if(sum>9){
tm = ""+sum;
carry = tm.charAt(0)-'0';
sum = tm.charAt(1)-'0';
tmp[i] = sum;
}else
{
tmp[i] = sum;
carry=0;
}
}
if(i==this.SIZE&&i!=second.SIZE){
for(;i< second.SIZE;i++){
tmp[i] = second.arr[i];
}
}else if(i==second.SIZE&&i!=this.SIZE){
for(;i< this.SIZE;i++){
tmp[i] = this.arr[i];
}
}
actualSize = i;
}
String n = "";
for(int i = actualSize-1;i>=0;i--){
n = n+""+tmp[i];
}
return n;
}
然后加完每一个元素之后,把数组的元素倒过来写到一个String ,因为我们刚开始倒过来加嘛所以最后要倒过去原来的状态。