奇安信前端算法笔试(2021秋招)——大数阶乘

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))

3.参考博客

  https://blog.csdn.net/lisp1995/article/details/52403507

原文地址:https://www.cnblogs.com/haveadate/p/13872349.html