面试经典题!大数相加!

145 阅读1分钟

今天我们来说一个非常经典的面试题,这道题在我们应聘前端工程师时,是经常遇到的,下面就让我们来说一下吧,希望能对你有所帮助!

有一个这样的需求:给定两个数字,比如我们设置第一个数字为1111111881111111119,第二个数字为222222222222228554552222,让你用代码实现两个数值的相加结果。此时,我们要怎么做才能坐到这个需求呢? 下面来放代码

       // 将两个数字定义为字符串
       var str1 = "1111111881111111119"
        var str2 = "222222222222228554552222"
        //得到str1、str2字符串的长度
        var len1 = str1.length
        var len2 = str2.length
        // 比较str1和str2的长度,返回较大的那个数
        var maxLen = Math.max(len1, len2)
        // 用0将str1补齐
        // var str11 = str1.padStart(len2, '0')
        // console.log(str11);
        var sum = 0; //两数相加的总和
        var tmp = 0; //定义tmp 存放进位
        var mysum = ''; //接收拼接后的sum
        // 遍历字符串,以最长的那个字符串为准
        for (var i = 0; i < maxLen; i++) {
            // string.charAt(index)  index表示字符串中某个数值的数字,即字符在字符串中的位置
            var sum = Number(str1.charAt(len1 - i - 1)) + Number(str2.charAt(len2 - i - 1)) + tmp;
            if (sum > 9) {
                // 11%10 1 即个位为1 十位进一
                sum = sum % 10 //对有进位的数值取余
                tmp = 1
            } else {
                tmp = 0
            }
            mysum = sum + mysum
        }
        console.log('两数相加的结果为:'+mysum);//两数相加的结果为:222223333334109665663341

这样的代码你看懂了吗?当然也就无惧这样的面试题啦!