大佬们,为什么全wa呀

P1591 阶乘数码

飘啊飘 @ 2020-01-07 09:06:06


#include<bits/stdc++.h>

using namespace std;

int n,x[1000000];

int main(){

    int i,j,c=1,b,k,y,z,m=0,a[11];
    cin>>y;
    for(int g=1;g<=y;g++){
    m=0;
    cin>>n>>z;
    x[1]=1;
    for(i=1;i<=n;i++){
        for(j=1;j<=c;j++){
            x[j]*=i;    
        }
        for(k=1;k<=c;k++){  
            b=x[k];
            x[k+1]+=b/10;
            x[k]=x[k]%10;
        }
        while(x[c+1]>0){
            b=x[c+1];
            x[c+2]+=x[c+1]/10;
            x[c+1]=b%10;
            c++;
        }
    }
    while(c>1&&x[c]==0)c--;                   
    for(i=c;i>=1;i--)
        if(x[i]==z)m++;
    a[g]=m;
    }
    for(i=1;i<=y;i++)
    {
        cout<<a[i]<<endl;
    }   
    return 0;
}

by daduoli @ 2020-01-07 12:53:45

你的x[i]没有清空。 更改代码如下:


by daduoli @ 2020-01-07 12:54:01

#include<iostream>
#include<fstream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>

using namespace std;

int n,x[1000000];

int main(){

    int i,j,c=1,b,k,y,z,m=0,a[11];
    cin>>y;
    for(int g=1;g<=y;g++)
    {
        m=0;
        for(int i=2;i<=c;i++)
        {
            x[i]=0;
        }
        c=1;
        cin>>n>>z;
        x[1]=1;
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=c;j++)
            {
                x[j]*=i;    
            }
            for(k=1;k<=c;k++)
            {  
                b=x[k];
                x[k+1]+=b/10;
                x[k]=x[k]%10;
            }
            while(x[c+1]>0)
            {
                b=x[c+1];
                x[c+2]+=x[c+1]/10;
                x[c+1]=b%10;
                c++;
            }
        }
        while(c>1&&x[c]==0)
        {
            c--;
        }
        for(i=c;i>=1;i--)
        {
            if(x[i]==z)m++;
        }
        a[g]=m;
    }
    for(i=1;i<=y;i++)
    {
        cout<<a[i]<<endl;
    }   
    return 0;
}

|