首先我们需要先理解,当两个数相加的时候得出的结果的数值长度,不会超过最长的那个数的2位,也就是最多就是超一位,例如9999+9999=19998,因为这里存在这一个上限,导致的。
其次我们还需要注意两个数长度不一致时的相加,产生的数组下标越界问题,后来发现采用三目运算符可以规避这个问题。
代码如下 ``` Javaimport java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String x = sc.nextLine();
String y = sc.nextLine();
char[] a = x.toCharArray();
char[] b = y.toCharArray();
if(a[0]=='0'&&b[0]=='0') {//如果a,b中有两个为0,程序终止
System.out.print(0);
System.exit(0);
}
for (int i = 0, j = a.length - 1; i < j; i++, j--) {//进行一个前后反转操作
char temp = a[i];
a[i] = a[j];
a[j] = temp;
}
for (int i = 0, j = b.length - 1; i < j; i++, j--) {
char temp = b[i];
b[i] = b[j];
b[j] = temp;
}
int lena = a.length;
int lenb = b.length;
int len = Math.max(lena, lenb);
int[] sum = new int[len + 1];
for (int i = 0; i < len + 1; i++) {
int sum1 = i < lena ? (a[i] - '0') : 0;
int sum2 = i < lenb ? (b[i] - '0') : 0;
sum[i] = sum1 + sum2;
}
//进行进位操作。
for (int i = 0; i < sum.length; i++) {
if (sum[i] >= 10) {
sum[i + 1] += 1;
sum[i] %= 10;
}
}
boolean ifFlag =true;
for (int i = sum.length-1; i>=0; i--) {
if (sum[i]==0&&ifFlag){//判断是否有前置多余的零。删去。
continue;
}else {
ifFlag=false;
System.out.print(sum[i]);
}
}
}
}
```


