为什么会RE
查看原帖
为什么会RE
230875
Surge_of_Force楼主2021/8/7 10: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;
}

2021/8/7 10:45
加载中...