// 字符串相加类
public class StringAddition {
// 方法:将两个字符串表示的非负整数相加
// 输入:两个字符串num1和num2,分别表示两个非负整数
// 输出:字符串表示的两个非负整数相加的结果
public String addStrings(String num1, String num2) {
// 使用StringBuilder来构建结果字符串,因为它支持高效的字符串插入操作
StringBuilder sb = new StringBuilder();
// 进位初始化为0
int carry = 0;
// 从字符串的末尾开始遍历,因为低位在字符串的末尾
int i = num1.length() - 1, j = num2.length() - 1;
// 当两个字符串都还有字符未处理,或者存在进位时,继续循环
while (i >= 0 || j >= 0 || carry != 0) {
// 初始化当前位的和为进位值
int sum = carry;
// 如果num1还有字符,将当前字符转换为数字并加到和中
if (i >= 0) sum += num1.charAt(i--) - '0';
// 如果num2还有字符,将当前字符转换为数字并加到和中
if (j >= 0) sum += num2.charAt(j--) - '0';
// 将和的个位数插入到StringBuilder的开头,实现逆序构建结果字符串
sb.insert(0, sum % 10);
// 更新进位值
carry = sum / 10;
}
// 将StringBuilder转换为字符串并返回
return sb.toString();
}
}
这段代码实现了两个以字符串形式表示的非负整数的相加。
它使用了StringBuilder来高效地构建结果字符串,并从字符串的末尾(即整数的低位)开始遍历,逐位相加,并处理进位。
最后,将StringBuilder转换为字符串并返回。
这种方法避免了将字符串转换为整数进行相加可能导致的溢出问题,并且能够高效地处理大数相加的情况。
输入输出示例
输入示例 1:
String num1 = "123";
String num2 = "456";
输出示例 1:
"579"
解释:字符串"123"和"456"分别表示数字123和456,它们相加的结果为579,因此输出为"579"。
输入示例 2:
String num1 = "99";
String num2 = "1";
输出示例 2:
"100"
解释:字符串"99"和"1"分别表示数字99和1,它们相加的结果为100,因此输出为"100"。
输入示例 3:
String num1 = "0";
String num2 = "0";
输出示例 3:
"0"
解释:字符串"0"和"0"分别表示数字0,它们相加的结果仍然为0,因此输出为"0"。
输入示例 4:
String num1 = "1000000000";
String num2 = "999999999";
输出示例 4:
"1999999999"
解释:这个示例展示了如何处理大数相加的情况。字符串"1000000000"和"999999999"分别表示数字10亿和9亿9千9百9十9万9千9百9十9,它们相加的结果为19亿9千9百9十9万9千9百9十9,因此输出为"1999999999"。这个例子展示了该方法的优势,即能够处理大数相加而不会导致整数溢出。