题解 P1134 【阶乘问题】

· · 题解

题解:

分析:N!的末尾只会是2,4,6,8(在此题中没有0)

又[2,4,6,8]中任意一个数乘6,末尾仍是本身

2 * 6 = 12,末尾为2,

4 * 6 =24,末尾为4,

6 6=36,末尾为6,8 6 =48,末尾为8

因为末尾数字只受末尾数字影响,所以4 2 8==4 2 5(意思是得到的末尾数字是一样的)

故所有乘5的时候都可以换为乘8.又多次乘8末尾是有规律的.找出规律即可.

上代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long s=1;//累乘器,一开始不能为0 
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        s*=i;
        while(s%10==0)
            s/=10;
        s=s%100000000;//这里很玄学 %10只有29 
    }
    printf("%lld",s%10);//取末尾 
    return 0;
}