题解 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;
}