n的阶乘定义为n!=1*2*3*……*n 如3!=6
n!通常最后会有很多0,如5!=120 最后有一个0,现在统计n!去除末尾的0后,最后k位是多少

使用高精度乘以单精度,但只保留20位就可以了。

还要去掉末尾的0.

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cmath>
using namespace std;
int n,k;
int ans[21],c[21];
int main()
{
    scanf("%d%d\n",&n,&k);
    ans[1]=1;
	ans[0]=1;
    for (int i=2;i<=n;i++)
    {
        ans[1]=ans[1]*i;
        for (int j=2;j<=min(19,ans[0]);j++)
        {
            ans[j]=ans[j]*i;
            ans[j]+=ans[j-1]/10;
			ans[j-1]%=10;
        }
		while (ans[ans[0]]>=10)
		{
			if (ans[0]==19) {ans[ans[0]]%=10;break;}
			ans[++ans[0]]=ans[ans[0]-1]/10;
			ans[ans[0]-1]%=10;
		}
        int s=1;
        while (ans[s]==0&&s<20) s++;
        if (s!=1)
        for (int j=s;j<20;j++)
          ans[j-s+1]=ans[j];
		ans[0]=19;
		while (ans[ans[0]]==0) ans[0]--;
    }
    for (int i=k;i>0;i--) printf("%d",ans[i]);
    printf("\n");
    return 0;
}