想问问不能用二维数组吗

P1591 阶乘数码

Sxu520 @ 2024-09-20 15:27:22

想问问是不能用二维数组吗 像这样写全WA了

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

int len(int a[][3050],int i){
    int j=3000;
    for(j=3000;j>=0;j--){
        if(a[i][j]!=0)
        break;
    }
    return j;
}

int main(){
    int n;
    cin>>n;
    int a[15][3050]={0};
    for(int i=0;i<n;i++){
        cin>>a[i][0]>>a[i][1];
        a[i][3]=1;
    }                                                 //从a[i][3]开始乘以及存数
                                                      //a[i][0]存n,a[i][1]存a,a[i][2]存结果 
    for(int i=0;i<n;i++){
        for(int k=2;k<=a[i][0];k++){
            for(int j=3;j<10;j++){
                a[i][j]=a[i][j]*k;
            }                                         //每一位都乘k
            for(int h=3;h<3000;h++){
                a[i][h+1]=a[i][h+1]+a[i][h]/10;
                a[i][h]=a[i][h]%10;
            }                                         //进位
        }
    }
    for(int i=0;i<n;i++){
        for(int j=3;j<=len(a,i);j++){
            if(a[i][j]==a[i][1])
            a[i][2]++;
        }                                             //将结果放到a[i][2]中
        cout<<a[i][2];
        if(i!=n-1)
        cout<<endl;
    }
    return 0;
}

by Sxu520 @ 2024-09-20 15:31:16

但是像这样写就AC了,感觉差别不大呀,有大佬解释下吗

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

int len(int a[]){
    int j=3000;
    for(j=3000;j>=0;j--){
        if(a[j]!=0)
        break;
    }
    return j;
}

int main(){
    int n;
    cin>>n;
    int a[12][3]={0};
    int b[3050]={1};
    for(int i=0;i<n;i++)
    cin>>a[i][0]>>a[i][1];
    for(int i=0;i<n;i++){
        for(int k=2;k<=a[i][0];k++){
            for(int j=0;j<3000;j++){
                b[j]*=k;
            }                                  //每一位都乘k
            for(int j=0;j<3000;j++){
                b[j+1]+=b[j]/10;
                b[j]%=10;
            }                                  //进位
        }
        for(int j=0;j<=len(b);j++){
            if(b[j]==a[i][1])
            a[i][2]++;
        }                                      //将结果放到a[i][2]中
        cout<<a[i][2]<<endl;
        b[0]=1;
        for(int j=1;j<3000;j++)
        b[j]=0;                                //给b[0]置1,其余置0
    }
}

by Yxy7952 @ 2024-09-20 15:31:16

@Sxu520

额,有可能是你自己的问题


|