求助大佬啊!为什么才70分!

P1591 阶乘数码

易建全 @ 2021-03-26 13:55:26

#include<bits/stdc++.h>
using namespace std;
const int N=4E4; 

struct node{
    int a[N];
    int len;
    node(){memset(a,0,sizeof(a));}
    node(int n){
        memset(a,0,sizeof(a));len=0;
        while(n){//32580
            a[len++]=n%10,n/=10;
        }
    }
    void print(){
        for(int i=len-1;i>=0;i--) cout<<a[i];
        cout<<endl;
    }
    void re(){ reverse(a,a+len);}//反转数组 
    void add(int x){
        if(a[0]==0) len--;
        a[len++]=x;
    }
    void hh(int x){
        int sum=0;
        for(int i=len-1;i>0;i--){
            if(a[i]==x) sum++;
        }
        cout<<sum<<endl;
    }
};
node operator + (const node x,const node y){
    node c;c.len=max(x.len,y.len);
    for(int i=0;i<c.len;i++){
        c.a[i]+=x.a[i]+y.a[i];
        c.a[i+1]+=c.a[i]/10;
        c.a[i]%=10;
    }
    if(c.a[c.len]!=0) c.len++;
    return c;
}
node operator * (const node x,const node y){
    node c;c.len=x.len+y.len;
    for(int i=0;i<x.len;i++){
        for(int j=0;j<y.len;j++){
            c.a[i+j]+=x.a[i]*y.a[j];
            c.a[i+j+1]+=c.a[i+j]/10;
            c.a[i+j]%=10;
        }
    }
    while(c.a[c.len-1]==0&&c.len>1) c.len--;
    return c;
}
int main(){
    int n;cin>>n;
    for(int i=1;i<=n;i++){
        node ans=node(1);
        int m,x;
        cin>>m>>x;
        for(int j=2;j<=m;j++){
            node t=node(j);
            ans=ans*t;
        }
        ans.hh(x);
    }

    return 0;
}

by wsyhb @ 2021-03-26 16:07:41

@易建全 只需将 hh() 函数中的 i>0 改成 i>=0 即可 AC


by 易建全 @ 2021-03-27 20:33:26

@wsyhb 谢谢大佬!


|