由于语言本身的限制或者是机器本身的限制,整型数字通常都是有大小限制的,超过大小的数字没有办法正常计算
比如在js里有安全整数的概念Number.MAX_SAFE_INTEGER与Number.MIN_SAFE_INTEGE分别是最大与最小安全整数
但是很多情况下有大数相加需求的,这时通常采用字符串或者数组的方式来进行加法操作,按照四则运算的规则来计算结果
如下:
/**
* [bigNumberAdd] 大数相加
* @param [num1] [String] 数字字符串1
* @param [num2] [String] 数字字符串2
* @return [String]
* */
function bigNumberAdd(num1, num2) {
//如果其中一个为0,返回另一个
if (num1 === '0') {
return num2;
}
if (num2 === '0') {
return num1;
}
//进位值,由于加法只有0或1两种
let add = 0;
let result = '';
while (num1.length || num2.length) {
let n1 = +(num1.slice(num1.length - 1) || '0');
let n2 = +(num2.slice(num2.length - 1) || '0');
num1 = num1.substring(num1.length-1, -1);
num2 = num2.substring(num2.length-1, -1);
//对应位置相加再加进位值
let curr = n1 + n2 + add;
if (curr >= 10) {
result = curr - 10 + result;
add = 1;
}else {
result = curr + result;
add = 0;
}
}
result = add === 1 ? add + result : result;
return result;
}
以上是简单的大数相加例子,字符串方法,也有数组方法以及其他效率更高的方法