题解:P1591 阶乘数码

· · 题解

思路分析

一道简单题,听我分析思路。

首先 n! 一定会爆 long long,而且根据算法标签,所以这题要用高精度乘法做。

由于最后阶乘的结果位数不会特别大,所以直接暴力判断每一位上是否为 a 就行了。

是的这题就是这么简单,跟题目本身一样,如果不会高精度乘法的话推荐去做 P1303 A*B Problem。

代码

#include<bits/stdc++.h>
using namespace std;
long long t,a[10009];
int main()
{
    cin>>t;
    for(int i=1;i<=t;i++)
    {
        long long n,k,ws=1,ans=0;
        cin>>n>>k;
        a[1]=1;
        for(int j=2;j<=10000;j++)a[j]=0;
        for(int j=2;j<=n;j++)
        {
            for(int l=1;l<=ws;l++)
            {
                a[l]*=j;
            }
            for(int l=1;;l++)
            {
                a[l+1]+=a[l]/10;
                a[l]%=10;
                if(l>=ws&&a[l+1]==0){ws=l;break;}
            }
        }
        for(int j=1;j<=ws;j++)
        {
            if(a[j]==k)ans++;
        }
        cout<<ans<<endl;
    }
}

完结撒花!