字符串相加,给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和
时间: 2023-11-13 22:12:17 浏览: 50
好的,我知道了。可以通过模拟竖式计算的方式,对两个字符串形式的非负整数进行相加。具体步骤如下:
1. 将两个字符串 num1 和 num2 分别转化为整数数组 a 和 b,其中 a[0] 和 b[0] 分别为最高位上的数字。
2. 定义一个结果数组 res,长度为 max(a.length, b.length) + 1,用于存放相加的结果,初始值全为 0。
3. 从低位到高位遍历 a 和 b,同时维护一个进位 carry(初始值为 0)。对于每一位,将 a[i] 和 b[i] 相加,再加上上一位的进位 carry,将和 mod 10 的值存入 res[i + 1] 中,将和除以 10 的值更新 carry。
4. 遍历结束后,如果 carry 不为 0,则将其存入 res[0] 中,否则将 res[0] 赋为 0。
5. 将 res 数组转化为字符串形式,去掉开头的 0,即为相加的结果。
代码实现如下:
```
public String addStrings(String num1, String num2) {
int[] a = new int[num1.length()];
int[] b = new int[num2.length()];
for (int i = 0; i < num1.length(); i++) {
a[i] = num1.charAt(num1.length() - 1 - i) - '0';
}
for (int i = 0; i < num2.length(); i++) {
b[i] = num2.charAt(num2.length() - 1 - i) - '0';
}
int[] res = new int[Math.max(a.length, b.length) + 1];
int carry = 0;
for (int i = 0; i < res.length - 1; i++) {
int sum = carry;
if (i < a.length) {
sum += a[i];
}
if (i < b.length) {
sum += b[i];
}
res[i + 1] = sum % 10;
carry = sum / 10;
}
res[0] = carry;
StringBuilder sb = new StringBuilder();
boolean leadingZero = true;
for (int i = res.length - 1; i >= 0; i--) {
if (res[i] != 0) {
leadingZero = false;
}
if (!leadingZero) {
sb.append(res[i]);
}
}
return sb.length() == 0 ? "0" : sb.toString();
}
```