样例过了,全wa,求调

P1591 阶乘数码

DSB_123456 @ 2024-01-29 16:04:31

自己测试也没问题

#include<bits/stdc++.h>
typedef long long i64;
typedef double f64;
using namespace std;

void setlen(int a[], int i)
{
    while (a[i] == 0 && i > 0)
        i--;
    a[0] = i;
}
void numcpy(int a[],int b[]){//b=a
    b[0]=a[0];
    for(int i=1;i<=b[0];i++)b[i]=a[i];
}
void mult(int a[],int b,int c[]){
    for(int i=1;i<=a[0];i++)c[i]+=a[i]*b;
    int jw=0;
    setlen(c,a[0]+10);
    for(int i=1;i<=c[0];i++){
        int tmp=c[i]+jw;
        jw=tmp/10;
        c[i]=tmp%10;
    }
    if(jw!=0)c[c[0]+1]=jw;
    setlen(c,a[0]+10);
}

void JC(int i,int c[]){
    int tmp[10005]={};
    tmp[0]=1;
    tmp[1]=1;
    for(;i>=1;i--){
        int tmp2[10005]={};
        mult(tmp,i,tmp2);
        numcpy(tmp2,tmp);
    }
    numcpy(tmp,c);
}

int main(){
    int t,ans[15]={};
    cin>>t;
    for(int i=0;i<t;i++){
        int n,a;
        cin>>n>>a;
        int b[10005]={};
        JC(n,b);
        for(int j=1;j<=b[0];j++){
            if(b[j]==a)ans[i]++;
        }
    }
    for(int i=0;i<t;i++)cout<<ans[i]<<endl;

    // printf("\nPress any key to exit.");
    // system("pause>nul");
    return 0;
}

|