Java之大数加减乘除——减法

发布时间 2023-04-17 00:06:17作者: 杪冬的鸡汤不好喝

加法和减法都是类似的,对齐,从最小位开始,然后不够减就借一,用数组就是a[n-1]=-1来记录,等待n-1位算的时候需要将-1算进去。

void subt(BigLong b){
int bool=0;
int ia=this.num.length;
int ib=b.num.length;
int m=ia,n=ib;
int[] big=this.num;
int[] small=b.num;
if(ib>ia){
bool=1;
m=ib;
big=b.num;
n=ia;
small=this.num;
}
int[] count=new int[m+2];
int i,j,z,tmp;
int flag=0;

for (i=m-1,j=n-1,z=m+1;i*j>0;i--,j--,z--){
tmp=count[z]+big[i]-small[j];
if(tmp<0){
count[z-1]=-1;
count[z]=count[z]+10+big[i]-small[j];
}else{
count[z]=tmp;
}
}
tmp=count[z]+big[i]-small[j];
if(tmp<0){
count[z-1]=-1;
count[z]=count[z]+10+big[i]-small[j];
}else{
count[z]=tmp;
}
i--;
j--;
z--;

if(i>-1){
while(i>=0){
count[z]=count[z]+big[i];
i--;
z--;
}
}
if(j>-1){
while(j>=0){
count[z]=count[z]+small[j];
j--;
z--;
}
}

for(i=m+1;i>=0;i--){
if(count[i]>=10){
count[i]=count[i]%10;
count[i-1]=count[i-1]+1;
}
}

for(i=0;i<count.length;i++){
if(count[i]!=0 && flag==0){
flag=1;
if(bool==1) System.out.print("-");
}
if(flag==1) System.out.print(count[i]);
}


}