题目
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
示例
输入:num1 = "11", num2 = "123"
输出:"134"
输入:num1 = "456", num2 = "77" 输出:"533"
思路
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/add-strings/solution/zi-fu-chuan-xiang-jia-by-leetcode-solution/
本题我们只需要对两个大整数模拟「竖式加法」的过程。竖式加法就是我们平常学习生活中常用的对两个整数相加的方法,回想一下我们在纸上对两个整数相加的操作,是不是如下图将相同数位对齐,从低到高逐位相加,如果当前位和超过 1010,则向高位进一位?因此我们只要将这个过程用代码写出来即可。
具体实现也不复杂,我们定义两个指针 i 和 jj分别指向num1和 num2的末尾,即最低位,同时定义一个变量 \textit{add}add 维护当前是否有进位,然后从末尾到开头逐位相加即可。你可能会想两个数字位数不同怎么处理,这里我们统一在指针当前下标处于负数的时候返回 00,等价于对位数较短的数字进行了补零操作,这样就可以除去两个数字位数不同情况的处理,具体可以看下面的代码。
代码
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var addStrings = function(num1, num2) {
let i=num1.length-1;
let j=num2.length-1;
let add=0;
let ans=[];
while(i>=0||j>=0||add!=0){
let x=i>=0?num1.charAt(i)-'0':0;
let y=j>=0?num2.charAt(j)-'0':0;
let sum=x+y+add;
ans.push(sum%10);
add=Math.floor(sum/10);
i--;
j--;
}
return ans.reverse().join('');
};