题解 | #阶乘末尾非零数字#
阶乘末尾非零数字
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")#每日一题#