80分救命
查看原帖
80分救命
659308
aa9527楼主2022/7/9 20:00
#include<iostream>
#include<math.h>
using namespace std;

int main()
{
	long long P;
	cin>>P;
	int length=8;
	int m[502]={0};
	m[1]=1;
	int n=1048576;		//2的20次方 
	int k=n;
	for(int i=1;n!=0;i++)
	{
		m[i]=n%10;
		n=n/10;
	}
	for(int i=1;i<=P/20-1;i++)		//先算20的整数倍次方,比如2的1279次方就先算前1260次方,剩下的19次方等下算 
	{
		for(int j=1;j<=(i+1)*20*log10(2)+1 && j<=501;j++)
		{
			m[j]=m[j]*k;
			if(m[j-1]>=10)
			{
				m[j]+=m[j-1]/10;
				m[j-1]=m[j-1]%10;
			}
		}
	}
	for(int i=1;i<=P%20;i++)		//上面得到的结果在这里算剩下的19次方 
	{
		for(int j=1;j<=(P/20*20+i)*log10(2)+1 && j<=501;j++)
		{
			m[j]=m[j]*2;
			if(m[j-1]>=10)
			{
				m[j]+=m[j-1]/10;
				m[j-1]=m[j-1]%10;
			}
		}
	}
	length=P*log10(2)+1;
	cout<<length<<endl;
	m[1]=m[1]-1;
	for(int i=500;i>=1;i--)
	{
		cout<<m[i];
		if((i-1)%50==0)
			cout<<endl;
	}
 } 
2022/7/9 20:00
加载中...