样例对 全RE

P1591 阶乘数码

Lukas_gaoxi_yan @ 2024-08-19 17:30:22

#include<bits/stdc++.h>
using namespace std;
//2569 
int t,n,m,a[5000],k=1,s;
int main(){
    cin>>t;
    a[0]=1;
    while(t--){
        cin>>n>>m;
        for(int i=2;i<=n;i++){
            for(int j=0;j<k;j++){
                a[j]=a[j]*i;
            }
            for(int j=0;j<k;j++){
                if(a[j]>=10){
                    a[j+1]=a[j+1]+a[j]/10;
                    a[j]=a[j]%10;
                    k++;
                }
            }
        }
        bool flag=false;
        for(int i=k-1;i>=0;i--){
            if(a[i]!=0)flag=true;
            if(flag){
                if(a[i]==m){
                    s++;
                }
            }
        }
        cout<<s<<endl;
        s=0;
        for(int i=0;i<1005;i++){
            a[i]=0;
        }
        a[0]=1;
    }
    return 0;
}

by 虫二bug2 @ 2024-08-19 21:12:39

注意一下k的处理


by 虫二bug2 @ 2024-08-19 21:13:32

@zhizhengaoxiyan code

#include<bits/stdc++.h>
using namespace std;
//2569 
int t,n,m,a[5000],k=1,s;
int main(){
    cin>>t;
    a[0]=1;
    while(t--){
        cin>>n>>m;
        k=1;//每组数据k的初值要重设
        for(int i=2;i<=n;i++){
            for(int j=0;j<k;j++){
                a[j]=a[j]*i;
            }
            for(int j=0;j<k;j++){
                if(a[j]>=10){
                    a[j+1]=a[j+1]+a[j]/10;
                    a[j]=a[j]%10;
                    //k++; 遍历时不改变长度
                }
            }
            //扫完再延长
            while(a[k]){
                a[k+1]=a[k]/10;
                a[k]%=10;
                k++;
            }
        }
        //统计不用太复杂
        s=0;//这个最好放前面
        for(int i=0;i<k;i++)if(a[i]==m)s++;
        cout<<s<<endl;
        for(int i=0;i<3005;i++){//1005太小了
            a[i]=0;
        }
        a[0]=1;
    }
    return 0;
}

by Lukas_gaoxi_yan @ 2024-08-20 08:00:05

@虫二bug2 感谢,已关,此帖完


by qiu_7 @ 2024-09-15 16:27:33

25y


|