这道题需要用到快速幂、高精度乘法还有位数求法
位数求法简单公式,x^n的位数=n*log10(x)+1
#if 1
#include <bits/stdc++.h>
using namespace std;
int a[2600];
int r[2600];
void mul(int *a,int *b)
{
memset(r,0,sizeof(r));
for(int i=0;i<500;i++)
{
int before = 0;
for(int j = 0;j<500;j++)
{
r[i+j]+= a[i] * b[j] + before;
before= r[i+j]/10;
r[i+j]%=10;
}
if(before)
r[i+500] += before;
}
}
void qp(int p)
{
int b[2600];
memset (b,0,sizeof(b));
b[0]=2;
while(p)
{
if(p&1)
{
mul(a,b);
for(int i=0;i<500;i++)
a[i]=r[i];
}
mul(b,b);
for(int i=0; i<500;++i)
b[i]=r[i];
p>>=1;
}
}
int main()
{
int p;cin>>p;
int N=(int )(p*log10(2)+1);
cout<<N<<endl;
memset(a,0,sizeof(a));
a[0]=1;
qp(p);
a[0]--;
int sum=0;
for(int i=499;i>=0;i--)
{
sum++;
cout<<a[i];
if(sum % 50 == 0)
cout<<endl;
}
return 0;
}
#endif // 1