Andrewlyx @ 2019-11-10 22:25:54
#include <bits/stdc++.h>
#define R register
#define mem(x,y) memset(x,y,sizeof(x))
using namespace std;
const int N=1e3+5;
int p,ans,c[N],e[N],d[N],cnt1=1,cnt2=1;
void multi(int op,int a[],int b[]) {
mem(e,0);
int q;
if(op) q=cnt1;
else q=cnt2;
for(R int i=1; i<=(q<500? q:500); i++) {
for(R int j=1; j<=cnt2; j++) {
e[i+j]+=(e[i+j-1]+a[i]*b[j])/10;
e[i+j-1]=(e[i+j-1]+a[i]*b[j])%10;
}
}
int x=cnt2+q;
while(!e[x]) x--;
if(op){
cnt1=(x>500? 500:x);
for(R int i=1;i<=cnt1;i++) c[i]=e[i];
}
else {
cnt2=x;
for(R int i=1;i<=cnt2;i++) d[i]=e[i];
}
}
void pow2(int b) {
c[1]=1;
d[1]=2;
while(b) {
if(b&1) multi(1,c,d);
multi(0,d,d);
b>>=1;
}
}
int main() {
cin>>p;
ans=(p/log2(10))+1;
cout<<ans<<endl;
pow2(p);
c[1]-=1;
for(R int i=500;i>=1;i--){
if(i%50==0&&i!=500) cout<<endl;
if(i>cnt1) cout<<0;
else cout<<c[i];
}
cout<<endl;
return 0;
}
by Absurdity @ 2019-11-10 22:33:32
@AndyLa 高精压一下位或高精数组开更大试试???
by Andrewlyx @ 2019-11-10 22:36:49
@Mysterious_wind 但好像这样也没有什么问题a
by Absurdity @ 2019-11-10 22:45:26
有点奇怪,没有跟RE有关的地方啊,为啥会是RE???