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()); // 从个位计算的(个位在最前面),所以翻转字符串即可 } }