求助大佬,为什么这个不对?

P1045 [NOIP2003 普及组] 麦森数

yhc12345 @ 2020-08-07 18:14:33

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#define INF 0x3f3f3f3f

using namespace std;
typedef long long ll;
int p;
const int N=1010;
struct bign {
    int d,num[N];
    bign() {
        memset(num,0,sizeof(num));
    }
}b,ans;
bign operator *(const bign &x,const bign &y) {
    bign res;
    for(int i=1;i<=x.d;i++) {
        for(int j=1;j<=y.d;j++) {
            res.num[i+j-1]=x.num[i]*y.num[j];
        }
    }
    for(int i=1;i<=res.d;i++) {
        if(res.num[i]>9) {
            res.num[i+1]=res.num[i]/10;
            res.num[i]%=10;
        }
    }
    res.d=x.d+y.d-1;
    if(res.num[res.d+1]>0) {
        res.d++;
    }
    return res;
}
int main() {
    ios::sync_with_stdio(false);
    scanf("%d",&p);
    printf("%d\n",(int)(p*log10(2)+1));
//  b.num[1]=5;
//  b.d=1;
//  ans.num[1]=6;
//  ans.d=1;
    //bign x=b*ans;
    //printf("%d %d %d",x.d,x.num[1],x.num[2]);
    b.num[1]=2;
    b.d=1;
    ans.num[1]=1;
    ans.d=1;
    while(p>0) {
        if(p&1) {
            ans=ans*b;
            p--;
        }
        b=b*b;
        p>>=1;
    }
    for(int i=500;i>=1;i--) {
        if(i%50==0&&i<500) {
            printf("\n");
        }
        if(ans.d<i) {
            printf("0");
        }
        else {
            printf("%d",ans.num[i]);
        }
    }
    return 0;
}

|