求助大神谢谢

P1591 阶乘数码

zhoujiatao @ 2023-09-25 16:24:27

#include<bits/stdc++.h>
using namespace std;
const int MAX=10000;
long long sum;
int x,y,z;
int main()
{

    int i,j,n;
    int fac[MAX+1];
    memset(fac,0,sizeof(fac));
    cin>>x;
    for(int k=1;k<=x;k++)
    {
        cin>>y>>z;
        sum=0;
        fac[1]=1;
        for(i=1;i<=y;i++)
        {
            for(j=1;j<=MAX;j++) 
                fac[j]=fac[j]*i;
            for(j=1;j<=MAX;j++)
            {
                fac[j+1]=fac[j+1]+fac[j]/10;
                fac[j]=fac[j]%10;
            }
        }
        i=MAX;
        while(fac[i]==0) 
            i--;
        for(j=i;j>=1;j--)
            if(fac[j]==z)
                sum++;
        cout<<sum<<endl;         
    }   
    cout<<endl;
    return 0;
 } 

样例是过来了(自己做了俩样例也过了),但是是零分,求大神帮助谢谢。


by 编码落寞 @ 2023-09-25 16:31:40

2
5 2
8 0

这组数据你就过不了


by zhoujiatao @ 2023-09-25 16:46:32

@编码落寞 呃...不懂哪里出问题了


by 编码落寞 @ 2023-09-26 10:36:51

@zhoujiatao 应该是多测未清空的问题。 导致第二次操作其他高位有值


by joe_001 @ 2023-10-27 22:04:43

#include<bits/stdc++.h>
using namespace std;
int n,a[100001],len,s,t,z;
int main()
{   
    cin>>s;
    for(int k=1;k<=s;k++)
    {
        cin>>n; 
        cin>>t;
        memset(a,0,sizeof(a));
        a[1]=1;
        len=1;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=len;j++)
                a[j]*=i;
            for(int j=1;j<=len;j++)
            {
                a[j+1]+=a[j]/10;
                a[j]%=10;   
            }
            if(a[len+1]>0)
                len++;
            while(a[len]>=10)
            {
                a[len+1]+=a[len]/10;
                a[len]%=10;
                len++;
            }
        }

        z=0;
        for(int j=1;j<=len;j++)
            if(a[j]==t)
                z++;
        cout<<z<<endl;
    }

    return 0;
}       

|