public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextLine()) { // 注意 while 处理多个 case
String str1 = in.nextLine();
String str2 = in.nextLine();
// 翻转字符串,以便从个位开始计算
str1 = new StringBuilder(str1.trim()).reverse().toString(); // 系统输入有坑,需要添加trim() 去空格
str2 = new StringBuilder(str2.trim()).reverse().toString();
// 利用数学中的常用加法算法
int index = 0; // 当前处理位所在下标,从个位开始
int pre = 0; // 前一位的进位
StringBuilder result = new StringBuilder();
while (index < str1.length() && index < str2.length()) {
int sum = Integer.parseInt(str1.charAt(index) + "") +
Integer.parseInt(str2.charAt(index) + ""); // 获得同位相加值
sum += pre; // 与前一位的进位相加
result.append(sum % 10); // 取得同位相加进位后的值
pre = sum / 10; // 获取进位值
index++; // 下标向下一位移动
}
// 跳出循环说明index 已经超过了其中一个字符串的长度,只用处理一个字符串即可
while (index < str1.length()) {
int sum = Integer.parseInt(str1.charAt(index) + "");
sum += pre;
result.append(sum % 10); // 取得同位相加进位后的值
pre = sum / 10; // 获取进位值
index++;
}
while (index < str2.length()) {
int sum = Integer.parseInt(str2.charAt(index) + "");
sum += pre;
result.append(sum % 10); // 取得同位相加进位后的值
pre = sum / 10; // 获取进位值
index++;
}
if (pre != 0) { // 最后可能进位1,最大位要放入1
result.append(pre);
}
System.out.println(result.reverse().toString()); // 从个位计算的(个位在最前面),所以翻转字符串即可
}
}