在掘金中看见的题目,记录一下?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
function sum(a, b) {
const aLen = a.length;
const bLen = b.length;
const len = aLen > bLen ? aLen : bLen;

// 让a和b变成一个长度的字符串
if (aLen !== len) {
for (let i = 0; i < len - aLen; i++) {
a = '0' + a
}
} else {
for (let i = 0; i < len - bLen; i++) {
b = '0' + b
}
}

// 让a和b 转成个位数在前的数组
const arrA = a.split('').reverse().map(i => Number(i))
const arrB = b.split('').reverse().map(i => Number(i))

// 用来记录结果的数组
const arr = []

// 两个数相加的和是不是大于10 大于为1 小于为0
let tmpN = 0

// 将每一位上的数相加 和大于10向后进一位
for (let i = 0; i < len; i++) {
const num = arrA[i] + arrB[i] + tmpN
if (num >= 10) {
arr.push(num - 10)
tmpN = 1
} else {
arr.push(num)
tmpN = 0
}
}
// 两数组最后一位的数的和大于1向后进一位
if (tmpN === 1) {
arr[len] = 1
}
// 将数组倒序(个位数在后)并拼接为字符串
return arr.reverse().join('')
}

// 测试
console.log(sum('45611564564648', '4567889222203456674833'))
console.log(45611564564648 + 4567889222203456674833)

原文链接