题解 | #阶乘末尾非零数字#

阶乘末尾非零数字

https://www.nowcoder.com/practice/248c8fbee56e491aa147b67b9c082da0

#include <iostream>
using namespace std;
int n;
int main() {
    cin >> n;
    /*
    n! 中 偶数 和 5相乘会出现0,而其它情况 答案就是 相乘的最后一位
    n2 表示 n!中有多少个因子2;n5 表示 n!中有多少个因子5;
    */
    int n2 = 0, n5 = 0;
    int p = 1;
    for(int i = 2; i <= n; i++){
        int temp = i;
        // 求 [2~n]中每个数的 因数5 的个数
        for(; temp % 5 == 0; temp/=5)
            n5++;
        for(; temp % 2 == 0; temp/=2)
            n2++;
        // 这个时候 剩下的temp 就是i 除去因子2 和 因子 5的 结果,这个时候再乘上最后一位非0数字p,就得到其它因子的成绩的最后一位非0数字
        p = p*temp % 10;
    }
    // 因子5和因子2相乘得到0,所以有多少因子5,就有多少因子0,如果因子2的个数大于因子5的个数,则剩下没用完的因子2要再乘回去才能算出正确的答案p
    for(int i = 0; i < n2 -n5; i++){
        p = p * 2 % 10;
    }
    cout << p << endl;
    return 0;
}
// 64 位输出请用 printf("%lld")

#每日一题#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务