求助

P1591 阶乘数码

Typical_typhoon @ 2023-06-07 13:15:31

#include<bits/stdc++.h>
#define int long long
using namespace std;
int c[3010];
int jc(int n,int k){
    memset(c,0,sizeof(c));
    int l=1,ans=0;n--;
    c[1]=1;
    for(int j=1;j<=n;j++){//高精乘低精
        for(int i=1;i<=l;i++){
            c[i]+=(c[i]*j);
        }
        for(int i=1;i<=l;i++){
            c[i+1]+=c[i]/10;
            c[i]%=10;
        }
        while(c[l+1]){
            c[l+1]+=c[l]/10;
            c[l]%=10;
            l++;
        }
    }
    // for(int i=l;i>=1;i--){
    //     cout<<c[i];
    // }cout<<"\n";
    for(int i=1;i<=l;i++){//计算数字出现的次数
        if(c[i]==k){
            ans++;
        }
    }
    return ans;
}
signed main(){
    int t,n,k;
    cin>>t;
    for(int i=1;i<=t;i++){
        cin>>n>>k;
        cout<<jc(n,k)<<"\n";//输出
    }
    //cout<<jc(114,2);
    return 0;
}

|