神奇?

P1045 [NOIP2003 普及组] 麦森数

Problem1613end @ 2024-02-20 19:52:38

这样也水过了?


#include<bits/stdc++.h>
using namespace std;
long long j[11000000],jw;
long long min(long long qw,long long pe){
    if(qw>pe)  return qw;
    else  return pe;
}
int sr(int f){
    int sw;
    for(sw=min(jw,500);sw>=1;sw--){
        j[sw]=j[sw]*f;
    }
    for(sw=1;sw<=min(jw,500);sw++){
        if(j[sw]>=10){
            j[sw+1]=j[sw+1]+j[sw]/10;
            j[sw]=j[sw]%10;
        }
    }
    if(jw>500)  return 0;
    while(1==1){
        if(j[jw+1]>0){
            jw++;
            if(jw>500)  return 0;
            if(j[jw]>=10){
                j[jw+1]=j[jw+1]+j[jw]/10;
                j[jw]=j[jw]%10;
            }
        }
        else{
            break;
        }
    }
    return 0;
}
int main(){
    long long p,a;
    cin>>p;
    cout<<floor(log10(2)*p+1)<<endl;
    jw=1;
    j[1]=1;
    for(a=p/16;a>=1;a--){
        sr(65536);
    }
    for(a=(p%16)/8;a>=1;a--){
        sr(256);
    }
    for(a=(p%8)/4;a>=1;a--){
        sr(16);
    }
    for(a=(p%4)/2;a>=1;a--){
        sr(4);
    }
    for(a=p%2;a>=1;a--){
        sr(2);
    }
    j[1]--;
    a=1;
    while(1==1){
        if(j[a]<0){
            j[a]=j[a]+10;
            j[a+1]--;
            a++;
        }
        else{
            break;
        }
    }
    for(int c=0;c<10;c++){
        for(int d=1;d<=50;d++){
            cout<<j[500-c*50-d+1];
        }
        cout<<endl;
    }
}

|