剑指offer-Day2

1.给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。【简单】

提示:

num1 和num2 的长度都小于 5100
num1 和num2 都只包含数字 0-9
num1 和num2 都不包含任何前导零
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式

思路:
1.字符串反序
2.获得字符串的最大长度,给小的前面补0
3.循环2个字符串,对应位相加
4.相加位sum = a + b + f,
t = Math.floor(sum/10)
f = sum%10
t == 1:
sum = “1” + f

js实现:—–低级版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function sum(num1,num2) {
var str1 = num1.split('').reverse().join('')
var str2 = num2.split('').reverse().join('')
let maxLen = Math.max(str1.length,str2.length)
let minLen = Math.min(str1.length,str2.length)
for(let i = 0; i < minLen;i++){
var result = []
let sum = Number(str1.charAt(i))+Number(str2.charAt(i))+result[0]
if(sum >= 10){
result.unshift(1,sum-10)
}else{
result.unshift(sum)
}
}
console.log((result.split(',').join('')).toString())

思路:
1.定义i,j分别为2个字符串的最大索引,进位add = 0
2.创建ans数组
3.当i >= 0 || j >= 0 || add != 0
x = 字符串1的最后一个值
y = 字符串2的最后一个值
result = x + y + add
数组加result的余数
进位是商
4.返回数组ans反序以join(‘’)连接,变成字符串

js实现:—-大佬

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var addStrings = function(num1, num2) {
let i = num1.length - 1, j = num2.length - 1, add = 0;
const ans = [];
while (i >= 0 || j >= 0 || add != 0) {
const x = i >= 0 ? num1.charAt(i) - '0' : 0;
const y = j >= 0 ? num2.charAt(j) - '0' : 0;
const result = x + y + add;
ans.push(result % 10);
add = Math.floor(result / 10);
i -= 1;
j -= 1;
}
return ans.reverse().join('');
};