JAVA超大整数的加法如何改成减法

public class HandleLargeNumber {public static void main(String[] args) {int a[]={0,9,9,7,9,4,5,6,7,2,3,4,5,6,4,7,8,9,8,7,6,9};int b[]={0,0,5,9,1,6,4,5,6,2,3,4,5,7,2,1,3,4,0,3,2,9};int c[]=new int[a.length];int i=0,result=0,k=0;for(i=0;i<a.length;i++){if(a[i]!=0){k=i;break;}}for(i=k;i<a.length;i++){System.out.printf("%d",a[i]);}System.out.printf("尀n加上:尀n");for(i=0;i<b.length;i++){if(b[i]!=0){k=i;break;}}for(i=k;i<b.length;i++){System.out.printf("%d",b[i]);}for(i=a.length-1;i>=0;i--){result=a[i]+b[i];if(result>=10){c[i]=result%10;a[i-1]=a[i-1]+1;}elsec[i]=result;}System.out.printf("尀n等于:尀n");for(i=0;i<c.length;i++){if(c[i]!=0){k=i;break;}}for(i=k;i<c.length;i++){System.out.printf("%d",c[i]);}}}
2026年09月23日 13:13
有1个网友回答
网友(1):

你这个道题很有意思,应该是怎么使用算法吧:
减法从各位开始计算,需要判断减数和被减数的大小:
A. 当减数 >= 被减数,标记后一位不用退位
B. 当减数 <    被减数,标记后一位需要退位
代码如下:
public class HandleLargeNumber {
public static void main(String[] args) {
int a[] = { 0, 9, 9, 7, 9, 4, 5, 6, 7, 2, 3, 4, 5, 6, 4, 7, 8, 9, 8, 7, 6, 9 };
int b[] = { 0, 0, 5, 9, 1, 6, 4, 5, 6, 2, 3, 4, 5, 7, 2, 1, 3, 4, 0, 3, 2, 9 };
jianFa(a,b);
// 下面是验证:通过BigInteger来做
BigInteger a1 = new BigInteger("997945672345647898769");
BigInteger a2 = new BigInteger("59164562345721340329");
System.out.println(a1.subtract(a2));
}
public static void jianFa(int[] a, int[] b) {
int idx1 = getStart(a);
print(a, idx1);
int idx2 = getStart(b);
print(b, idx2);
boolean isTui = false; // 是否退位标记
int c[] = new int[a.length];
for (int i = a.length; i > idx1; i--) {
if (!isTui) {
// 不退位
int aNum = a[i - 1];
int bNum = b[i - 1];
if (aNum >= bNum) {
c[i - 1] = aNum - bNum;
isTui = false;
} else {
c[i - 1] = 10 + aNum - bNum;
isTui = true;
}
} else {
// 退位
int aNum = a[i - 1] - 1;
int bNum = b[i - 1];
if (aNum >= bNum) {
c[i - 1] = aNum - bNum;
isTui = false;
} else {
c[i - 1] = 10 + aNum - bNum;
isTui = true;
}
}
}
System.out.printf("\n等于:\n");
print(c, getStart(c));
}
private static int getStart(int[] arr){
for (int i = 0; i < arr.length; i++) {
if (arr[i] != 0) {
return i;
}
}
return 0;
}
private static void print(int[] arr, int start){
for (int i = start; i < arr.length; i++) {
System.out.printf("%d", arr[i]);
}
System.out.print("\n");
}
}

上面的例子只适用用减数大于被减数,当减数小于被减数时,需要额外的计算,不过思路差不多,复杂度大了很多,呵呵。


亲,如果回答满意,请及时采纳,谢谢!!!