题目描述
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
题解
从后向前每一位相加,记得判断好进位。详见代码注释
class Solution {
public String addStrings(String num1, String num2) {
//存放结果
StringBuilder res = new StringBuilder();
char[] c1 = num1.toCharArray();
char[] c2 = num2.toCharArray();
//标记进位状态
int flag = 0;
//从后向前,逐位相加
for (int i = c1.length - 1, j = c2.length - 1; i >= 0 || j >= 0; i--, j--){
//两个数字的每一位,假如i或j小于0,那么就设置为0就好了
int a = i >= 0 ? c1[i] - '0' : 0;
int b = j >= 0 ? c2[j] - '0' : 0;
//两个数 + 上一次的进位
int sum = a + b + flag;
//大于10,则进位为1
flag = sum / 10;
//进位完,当前剩余的余数
int count = sum % 10;
//添加到res后面
res.append(count);
}
//判断最高位是否有进位
if (flag == 1) res.append('1');
//反转res返回
return res.reverse().toString();
}
}