全WA? 求大神

P1591 阶乘数码

w1141919 @ 2024-07-29 22:27:56

#include<iostream>
using namespace std;
int a[50000]={0},n,cnt=0,l=1,t,nn;
int main(){
    cin>>t;
    for(int i=1;i<=t;i++){
        cin>>n;
        cin>>nn;
        a[0]=1;
    for(int j=1;j<=n;j++){
        int x=0;
        for(int y=0;y<=l;y++){
            a[y]=a[y]*j+x;
            x=a[y]/10;
            a[y]%=10;
        }
        while(x!=0){
            l++;
            a[l]=x%10;
            x/=10;
        }
    }
    for(int j=l;j>=0;j--){
        if(a[j]!=0||j==0){
            for(int y=j;y>=0;y--){
                if(a[y]==nn){
                    cnt++;
                }break;
            }
        }
    }
    cout<<cnt<<endl;
    }
}

by 虫二bug2 @ 2024-08-19 20:47:04

统计出现次数不用那么麻烦,l的处理是主要问题


by 虫二bug2 @ 2024-08-19 20:48:12

@w1141919 改过的 code

#include<iostream>
using namespace std;
int a[3001]={0},n,cnt,l,t,nn;
int main(){
    cin>>t;
    for(int i=1;i<=t;i++){
        cin>>n;
        cin>>nn;
        a[0]=1;
        cnt=0;
        l=0;//每一次重新从1算起,l要清零
        //数组下标从0开始,l应设为0
        for(int j=1;j<=n;j++){
            int x=0;
            for(int y=0;y<=l;y++){
                a[y]=a[y]*j+x;
                x=a[y]/10;
                a[y]%=10;
            }
            while(x!=0){
                l++;
                a[l]=x%10;
                x/=10;
            }
        }
        for(int j=l;j>=0;j--){
           if(a[j]==nn)cnt++;
        }
        cout<<cnt<<endl;
    }
}

|