求助P1591全wa 0分

P1591 阶乘数码

hunj @ 2024-08-28 20:10:53

#include<bits/stdc++.h>
using namespace std;
//定义数组a,b,c 
int a[10005];
int b[10005];
int c[10005];
int main(){
    int t;
    cin>>t;
    int n,aa;
    for(int p=1;p<=t;++p){
        //p组数据 
        cin>>n>>aa;
        string jc="1";
        for(int i=1;i<=n;++i){
            //转入字符串s 
            int k=i;
            string s="";
            while(k>0){
                int x=k%10;
                char ch=k+'0';
                s=ch+s;
                k=k/10;
            }
            //将a,b,c数组清空 
            for(int j=0;j<=10000;++j){
                a[j]=0;
                b[j]=0;
                c[j]=0;
            }
            //做js和s 高精度乘法 
            //反转字符串 
            reverse(jc.begin(),jc.end());
            reverse(s.begin(),s.end());
            //lena,lenb,lenc记录字符串长度 
            int lena=jc.size()-1;
            int lenb=s.size()-1; 
            int lenc=jc.size()+s.size()-1;
            //将jc,s中的每一位数转成数字分别存入a,b数组中 
            for(int j=0;j<=lena;++j){
                a[j]=jc[j]-'0';
            }
            for(int j=0;j<=lenb;++j){
                b[j]=s[j]-'0';
            }
            for(int j=0;j<=lena;++j){
                for(int k=0;k<=lenb;++k){
                    c[j+k]=c[j+k]+a[j]*b[k];
                    c[j+k+1]=c[j+k+1]+c[j+k]/10;
                    c[j+k]=c[j+k]%10;
                }
            } 
            while(c[lenc]==0&&lenc>0) --lenc;
            //再把结果转存到jc变量中
            jc="";
            for(int j=lenc;j>=0;--j){
                char q=c[j]+'0';
                jc=jc+q;
            } 
        }
        //检查jc这个数里面有多少个数码a 
        int cnt=0;
        for(int i=0;i<=jc.size()-1;++i){
            if(jc[i]-'0'==aa){
               ++cnt;   
            }
        }
        cout<<cnt<<endl;
    }
    return 0;
}

错误记录

大佬帮忙看一下,谢谢


|