你这个道题很有意思,应该是怎么使用算法吧:
减法从各位开始计算,需要判断减数和被减数的大小:
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");
}
}
上面的例子只适用用减数大于被减数,当减数小于被减数时,需要额外的计算,不过思路差不多,复杂度大了很多,呵呵。
亲,如果回答满意,请及时采纳,谢谢!!!