求助,wa了8个点
查看原帖
求助,wa了8个点
157147
ljh6jz楼主2020/8/9 15:24
#include<cstdio>
#include<cmath>
using namespace std;

const int N=1001000;

int a[N],n,len;

int read();

void pre(){
	for(int s=2;;++s){
		for(int i=1;i<=a[0];++i){
			a[i]*=2;
		}
		for(int i=1;i<=a[0];++i){
			if(a[i]>=10){
				a[i+1]+=a[i]/10;
				a[i]%=10;
			}
		}
		while(a[a[0]+1]>0){
			if(a[0]>500){
				break;
			}
			a[0]++;
		}
		if(a[0]>500)return;
	}
}

int main(){
	n=read();
	a[0]=1;
	a[1]=1;
	printf("%d\n",(int)(len=log10(2)*n+1));
	if(len>500){
		pre();
		n-=500;
		while(n>20){
			for(int i=1;i<=a[0]&&i<=500;++i){
				a[i]*=1048576;
			}
			for(int i=1;i<=a[0]&&i<=500;++i){
				if(a[i]>=10){
					a[i+1]+=a[i]/10;
					a[i]%=10;
				}
			}
			while(a[a[0]+1]>0){
				if(a[0]>500){
					break;
				}
				a[0]++;
			}
			n-=20;
		}
		while(n>0){
			for(int i=1;i<=a[0];++i){
				a[i]*=2;
			}
			for(int i=1;i<=a[0];++i){
				if(a[i]>=10){
					a[i+1]+=a[i]/10;
					a[i]%=10;
				}
			}
			while(a[a[0]+1]>0){
				if(a[0]>=500){
					break;
				}
				a[0]++;
			}
			n--;
		}
		a[1]--;
	//	printf("%d\n",a[0]);
		for(int i=10;i>=1;--i){
			for(int j=0;j<50;++j){
				printf("%d",a[i*50-j]);
			}
			printf("\n");
		}
	}
	else{
		for(int s=1;s<=n;++s){
			for(int i=1;i<=a[0];++i){
				a[i]*=2;
			}
			for(int i=1;i<=a[0];++i){
				if(a[i]>=10){
					a[i+1]+=a[i]/10;
					a[i]%=10;
				}
			}
			while(a[a[0]+1]>0){
				if(a[0]>=500){
					break;
				}
				a[0]++;
			}
		}
		a[1]--;
	//	printf("%d\n",a[0]);
		for(int i=10;i>=1;--i){
			for(int j=0;j<50;++j){
				printf("%d",a[i*50-j]);
			}
			printf("\n");
		}
	}
	return 0;
}

int read(){
	int h=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')w=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		h=h*10+ch-'0';
		ch=getchar();
	}
	return h;
}

2020/8/9 15:24
加载中...