题解 P1134 【阶乘问题】
看到这道题一开始想就把ans每次*i然后取最右非零值一直保留个位去计算,但是发现只能过n最多为14的点
因为 14!最后两位为12,*15后应该得出结果8但是这样就是3了。
想了想,当i为2位数且为5的倍数时,ans的倒数第二位也会对结果造成影响,所以ans至少保留8位数字,因为最大的数为8位,所以每次ans%=10改成%=100000000就行了
目前没有找到这种方法不正确的地方
#include<cstdio>
#include<cstring>
int n;
long long ans;
int main()
{
scanf("%d",&n);
ans=1;
for(int i=2;i<=n;i++)
{
ans*=1ll*i;//心理作用,实际并没有用
while(ans%10==0) ans/=10;
ans%=100000000;
}
printf("%lld\n",ans%10);
return 0;
}