求助 全WA

P1591 阶乘数码

microchip @ 2021-10-07 09:17:14

自测阶乘写得没问题,该初始化的也初始化了,造了几组数据也过了,但是全WA

#include<bits/stdc++.h>
using namespace std;

int T,n,k,ans;
int num[1000];

int qdl(){
    int r;
    for(r=999;num[r]==0;r--);
    return r;
}

int main()
{
    cin>>T;
    while(T--){
        ans=0;
        cin>>n>>k;
        memset(num,0,sizeof(num));
        num[1]=1;
        for(int i=2;i<=n;i++){
            int s=qdl();
            for(int j=1;j<=s;j++){
                num[j]*=i;
                num[j]+=num[j-1]/10;
                num[j-1]%=10;
            }for(int j=s;j<1000;j++){
                if(num[j]>9){
                    num[j+1]+=num[j]/10;
                    num[j]%=10;
                    continue;
                }break;
            }
        }int x=qdl();
        for(int i=1;i<=x;i++)
            if(num[i]==k)ans++;
        cout<<ans<<endl;
    }
    return 0;
}

by DZdz1001 @ 2021-12-01 12:11:04


#include<iostream>
#include<algorithm>
#include<string.h>
#define maxn 100010 
using namespace std;
int c[maxn];
int main()
{
    int t;
    cin>>t;
    int n,a;
    while(t--)
    {
        cin>>n>>a;
        //数组清空 
    //  memset(c,0,sizeof(c));

        c[1]=1;//初始化 
        int p=1;//记录当前位数 

        //枚举枚举每一个要乘的单精度 
        for(int i=2;i<=n;i++)
        {
            int jw=0;
            int j;
            //枚举数组c的每一位,模拟乘法过程 
            for(j=1;j<=p;j++)
            {
                jw+=c[j]*i;
                c[j]=jw%10;
                jw/=10;
            }
            while(jw)//解决多进位 
            {
                c[j]=jw%10;
                jw/=10;
                j++;
            }
            p=j-1;      
        }
        //统计次数 
        int sum=0;
        for(int i=p;i>=1;i--)
        if(c[i]==a)sum++;
        cout<<sum<<endl;

    }

    return 0;
 } 

|