/**大数加法
实现原理,利用竖式加法原理
*/
function addStrings(num_str1, num_str2) {
//字符串转字符数组
const num_arr1 = num_str1.split('');
//字符串转字符数组
const num_arr2 = num_str2.split('');
// 竖式加法计算次数
let sum_length = Math.max(num_arr1.length, num_arr2.length);
//求和结果
const sum = [];
//进位标志位
let CF = 0;
// 循环语句为什么加CF进位存在判断呢,因为当最高位产生进位,(如 999 + 9999)
// 计算到千分位9的时候,并且没有更多数要参与运算时,任然需要进位参与一次运算,否则丢失进位。
while (sum_length-- > 0 || CF) {
// 求和,注意数组长度不够,按0算
let temp = Number.parseInt(num_arr1.pop() || 0)
+ Number.parseInt(num_arr2.pop() || 0) + CF;
if (temp >= 10) {
temp %= 10; // 取个位数
CF = 1; //产生进位(对于加法,最多产生1个进位)
} else {
CF = 0 // 未产生进位
}
sum.unshift(temp); // 记录求和数据(从头插入)
}
return sum.join('')
}
eg: