一、题目描述
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
示例 1:
输入:num1 = "11", num2 = "123"
输出:"134"
示例 2:
输入:num1 = "456", num2 = "77"
输出:"533"
示例 3:
输入:num1 = "0", num2 = "0"
输出:"0"
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/add-strings
二、运行结果
三、解题思路
设置一个进位标志( flag,初始化为0),从两个字符串的最后一位(数字最低位)开始相加,两个字符串中的当前位和进位标志相加,得到的结果对10求余,得到结果的当前位,除以10得到当前位的进位结果,直至两个字符串都遍历完。
如果最高为计算完成后还有进位,就在最终结果加上一位1。
四、代码
class Solution {
public String addStrings(String num1, String num2) {
int index1 = num1.length() - 1;
int index2 = num2.length() - 1;
StringBuilder ansStr = new StringBuilder();
int flag = 0; //进位标志
while(index1 >= 0 || index2 >=0)
{
int tmp1 = index1 >= 0 ? num1.charAt(index1) - '0' : 0;
int tmp2 = index2 >= 0 ? num2.charAt(index2) - '0' : 0;
int bit = (tmp1 + tmp2 + flag) % 10; //商(当前位结果)
flag = (tmp1 + tmp2 + flag) / 10; //进位值
ansStr.append(bit);
index1--;
index2--;
}
if(flag == 1) //最高位计算后有进位
ansStr.append(1);
return ansStr.reverse().toString();
}
}