js 大数加法

 

        /**大数加法
        实现原理,利用竖式加法原理
         */
        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: 

 

 

 

 

@萍2樱释ღ( ´・ᴗ・` )

 

posted @ 2020-11-21 00:12  不忘初心dbsdxq  阅读(531)  评论(0编辑  收藏  举报
TOP 文章底部