大佬们能帮我看看下面代码为什么会过不去吗,用的封装和重载,但全挂了

P1591 阶乘数码

Xuegg @ 2023-03-24 16:59:40

//为什么以下算法会错?
#include<iostream>
#include<string.h>
#define MAXN 10000
using namespace std;
struct Bigint{
    int b[MAXN],len; // a表示要将整数转换为数组,len记录位数
    Bigint(int x = 0){
        memset(b,0,sizeof(b));
        for(int len = 1;x;len++){
            b[len] = x % 10;
            x /= 10;
        }
        len--;
    }
    int &operator[](int i){
        return b[i];
    }//重载操作符[], 可以用 x[i] 代表 x.a[i]
    void flatten(int L){//展平,一口气处理1到L范围内的进位并重置长度。
        len = L;
        for(int i = 1;i <= len;i++){
            b[i + 1] += b[i] / 10;
            b[i] %= 10;
        }
        while(b[len] == 0){
            len -- ;
        }
    }
    int cntNum(int a){
        int cnt = 0;
        for(int i = max(1,len);i >= 1;i--){
            if(a == b[i]) cnt ++;
        }
        return cnt;
    }
};

Bigint operator* (Bigint e, int c){
    Bigint d(0);
    int len = e.len;
    for(int i = 1;i <= len;i++){
        d[i] = e[i] * c;
    }
   d.flatten(len + 11);
   return d;
}

int main(){
    int t = 0,cnt = 0;
    int n = 0,a = 0;
    cin >> t;
    for(int i = 1;i <= t;i++){
        Bigint ans(1);
        cin >> n >> a;
        for(int j = 1;j <= n;j++){
            ans = ans * j;
        }
        cout << ans.cntNum(a) <<endl;
    }
    return 0;
}

|