根据题意,输入长度会超出java中的long类型长度,所以这里使用加法逻辑,对字符串逐位相加,输出结果。注释已经解释的很明白了
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String n1 = sc.next();
String n2 = sc.next();
int i = n1.length() - 1; // 索引建立在字符串末尾
int j = n2.length() - 1; // 索引建立在字符串末尾
boolean needCarry = false; // 是否需要进位运算,即是否需要向上一位加一
Stack<Integer> stack = new Stack<>(); // 使用栈是因为加法从右往左算,而输出是从左往右,栈可以刚好满足需求
while (i >= 0 || j >= 0) { // 需要两个字符串都遍历结束
char c1 = '0';
char c2 = '0';
int result = 0;
if (i >= 0) {
c1 = n1.charAt(i);
}
if (j >= 0) {
c2 = n2.charAt(j);
}
result = (c1 - 48) + (c2 - 48) + (needCarry ? 1 : 0);
needCarry = false;
if (result > 9) {
result %= 10;
needCarry = true; // 此时需要进位
}
stack.push(result); // 入栈
i--;
j--;
}
if (needCarry) {
// 如果需要进位,表示最后计算的值大于10,所以最高位为1
stack.push(1);
}
// 遍历栈,输出,由于入栈时,是低位到高位入栈,则出栈由高位向低位,满足一般的阅读顺序
while (!stack.empty()) {
System.out.print(stack.pop());
}
// 记得输出回车换行,否则编译不通过
System.out.println();
}
}
} 


京公网安备 11010502036488号