1.背景
紧接前面奇安信前端算法笔试(2021秋招)——动态规划一文,在此次笔试中,只有两道算法题,第二道就是大数阶乘。经过一些了解,才知道,奇安信此次笔试,在算法题方面,前端和后端考核完全一样!多的不说了,在网上查找大数阶乘的解决方法,如果要看解决思路(超详细),请点击传送门。那位老哥的博客代码是用C语言写的,我这里用的是JS,JS事前不用考虑结果的位数,直接push就完事了!(这里,代码量不多,在我看完那位老哥思路后,自己写代码思考时,多写了点注释)
2.解决方法
function bigFactorially(n) { let res = [1] for (let i = 2; i <= n; i++) { // 注意,num只表示进位的数,temp表示每次i与数组中某元素相乘的计算结果 let [num, temp] = [0, 0] // 阶乘中,某一个数乘以前面的结果 // 例如5的阶乘,在求值过程中,有24 * 5这个过程 // 此时res = [2, 4],i = 5 for (let j = 0; j < res.length; j++) { temp = res[j] * i + num res[j] = temp % 10 num = parseInt(temp / 10) } // 当前面计算过程结束时,如果还存在进位情况,则需要做出处理 while(num != 0) { res.push(num % 10) num = parseInt(num / 10) } } return res.reverse().join('') } console.log(bigFactorially(200))