超时求助
  • 板块P1729 计算e
  • 楼主hcybazt11
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/7/8 09:30
  • 上次更新2024/7/8 11:07:51
查看原帖
超时求助
914795
hcybazt11楼主2024/7/8 09:30
#include<bits/stdc++.h>
using namespace std;
int main(){
	int a[30005]={},b[20005]={},c[20005]={},dl,el=1,n=3249,ws;
	cin>>ws;
	dl=ws+1;
	b[0]=1;
	a[ws]=1;
	for(int i=n;i>=1;i--){
		for(int j=0;j<el;j++)b[j]*=i;
		for(int j=0;j<el+10;j++){
			b[j+1]+=b[j]/10;
			b[j]%=10;
		}
		for(int j=el+10;b[j]==0;j--)el=j;
		for(int j=ws;j<ws+el;j++)a[j]+=b[j-ws];
		for(int j=ws;j<dl+10;j++){
			a[j+1]+=a[j]/10;
			a[j]%=10;
		}
		for(int j=dl+10;a[j]==0;j--)dl=j;
	}
	for(int i=dl-el;i>=0;i--){
		for(int j=1;j<=9;j++){
			int p=0;
			for(int k=i+el;k>=i;k--){
				if(b[k-i]>a[k]){
					p=1;
					break;
				}else if(b[k-i]<a[k]){
					break;
				}
			}
			if(p)break;
			for(int k=i;k<=i+el;k++){
				a[k]-=b[k-i];
				if(a[k]<0){
					a[k+1]--;
					a[k]+=10;
				}
			}
			c[i]=j;
		}
	}
	int x=-1;
	for(int i=dl-el+2;i>=0&&c[i]==0;i--)x=i;
	cout<<c[x-1]<<".\n"; 
	for(int i=x-2;i>=0;i--){
		if((x-i-2)%5==0&&(x-i-2)%50!=0)cout<<" ";
		if((x-i-2)%50==0&&i!=x-2)cout<<"\n";
		cout<<c[i];
	}
	return 0; 
}

自己测试了一下,4500位左右就会超时

2024/7/8 09:30
加载中...