杭州城市建设网站,网上做家教那个网站好,您的网站对百度设置了ua封禁z怎么解决,北京网站设计多少钱无论你面试的是什么岗位#xff0c;应该都或多或少看到过这个问题 - 两个长整数相加要怎么实现。如果a和b的位数不大#xff0c;确实直接用类型转换就可以求出ab了#xff0c;但是万一a和b的位数都是几百位呢#xff0c;早就溢出了#xff0c;这时候要怎么计算呢#xff…无论你面试的是什么岗位应该都或多或少看到过这个问题 - 两个长整数相加要怎么实现。如果a和b的位数不大确实直接用类型转换就可以求出ab了但是万一a和b的位数都是几百位呢早就溢出了这时候要怎么计算呢这种情况下有三种解决方法可供选择一、 用字符串来存储a和b的值二、 用数组来存储a和b的值三、 用链表来存储a和b的值。这三种方法都有一个共同点就是无论哪一种方法都可以不用担心因为数字太大而造成数值溢出出错。而它们的解决思路也都大同小异下面我们来分析解决思路。做这种题的时候我有一个惯性思维就是用我们现实中的解题思路来教给计算机让它也用这种方法来解决。回忆一下我们小学的时候老师是不是教我们做加法的时候要从最后一位开始加遇到十的时候就要进行进位直至两个数都加完。在编程中我们也可以用这个思路来进行做题先找到a和b的最后一位将这两个一位数相加并假设它存在tmp中如果tmp大于9那么就说明需要进位了这时候加入一个标识表示是否需要进位比如说我们拿addOne作为标识那么这时候我们就需要将addOne置为1然后tmp对10进行取模就可以得到当前位置上的实际数值了再对a和b的倒数第二位进行重复的操作...直至将a和b遍历完就结束。下面这段代码是用第二种方法来解决的大家可以参考一下1 //方法二将数字转化为数组再进行相加2 functionadd(num1, num2){3 //将num1和num2转为数组每格存储一位比如num1 “12345”转成数组a之后就变成[1, 2, 3, 4, 5]4 let a String.prototype.split.call(num1, );5 let b String.prototype.split.call(num2, );6 //用来存储结果7 let res [];8 let addOne 0; //用于判断是否需要金威9 //当a和b其中一个不为空时各取出最后一位数字并相加如果其中一个先为空了则将它置为010 while(a.length ||b.length){11 let item1 parseInt(a.pop()) | 0;12 let item2 parseInt(b.pop()) | 0;13 let tmp item1 item2 addOne;14 if(tmp 9){15 addOne 1;16 tmp % 10;17 }else{18 addOne 0;19 }20 //unshift是js中的一个操作方法array.unshift(item)表示在数组array的最前面插入item21 res.unshift(tmp)22 }23 //当a和b都全部加完了之后再最后一次判断是否需要进位24 if(addOne) res.unshift(1);25 //最后利用join把数组转成字符串并返回26 return res.join();27 }其他两种方法做起来也都大同小异思路是一样的只不过是实际操作起来的方法会有所不同大家可以自己探索一下。