Surge_of_Force @ 2021-08-07 10:45:45
#include<bits/stdc++.h>
using namespace std;
string ggc(string,string);
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int p;
cin>>p;
cout<<int(log10(2)*p+1)<<endl;
//10^n有n+1位,令2^p=k,2=10^lg(2),k=(10^lg(2))^p
//=10^(lg(2)*p),所以2^p有lg(2)+1位
string anss="1",b="2";
//快速幂:
while(p)
{
if(p&1)
anss=ggc(anss,b);
p>>=1;
b=ggc(b,b);
}
int jy=anss[anss.size()-1]-'0';
jy--;
anss[anss.size()-1]=char(jy+'0');
cout<<anss;
//cout<<ggc("2","3");
}
string ggc(string a,string b)
{
int x[1021]={0},y[1021]={0},z[1021]={0};
string ans="0";
//if(a=="0"||b=="0")
// return "0";
//int lla=a.size(),llb=b.size();
//int la=min(lla,500),lb=min(llb,500);
int la=500,lb=500;
for(int i=la;i>=1;i--)
x[i]=a[la-i]-'0';
for(int i=lb;i>=1;i--)
y[i]=b[lb-i]-'0';
for(int i=1;i<=la;i++)
{
for(int j=1;j<=lb;j++)
{
z[i+j]+=(z[i+j-1]+x[i]*y[j])/10;
z[i+j-1]=(z[i+j-1]+x[i]*y[j])%10;
}
}
for(int i=500,j=0;i>=1;i--,j++)
ans[j]=char(z[i]+'0');
return ans;
}
by cannothelp @ 2021-08-07 14:21:06
for(int i=la;i>=1;i--) x[i]=a[la-i]-'0'; a字符串一开始有这么多位吗