众所周知,计算机计算的数字是有上限的,js里可以精确表示的最大值是 Number.MAX_SAFE_INTEGER,那超过这个值的两个整数求和,要怎么计算呢?
整数的加法无非就是从低位到高位按位相加,满10进1,按正常思维,只需要把大整数的每一位分别计算即可。1
2
3
4
5
6
7
8
9
10
11function plus(a,b){
let m = a.split(''), n = b.split('')
let result = '', flag = 0
while(m.length || n.length || flag){
let temp = Number(m.pop() || 0) + Number(n.pop() || 0) + Number(flag)
result = '' + temp%10 + result
flag = temp > 9//如果满10需要进1,就把flag置为true,转化为Number后就是1
}
return result
}
plus('1232321412312312312313124124','987987979798797879879797')//"1233309400292111110193003921"
由于Number.MAX_SAFE_INTEGER的值有16位,其实至少可以每10位或者15位相加也是可以的。
1 | function plus(a,b){ |
实际测试后发现,使用这种方法虽然循环的次数变少了,但是并不会更高效,反而会耗时更多,所以我们还是采用第一种方法进行大整数的计算即可。