前面都对,到15就错了,搞了一天,求救
查看原帖
前面都对,到15就错了,搞了一天,求救
288003
JJy_yt楼主2022/2/24 08:25
#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;
void Add(int a[],int b[]){
	int n=a[0]>b[0]?a[0]:b[0];
	int lena=a[0],lenb=b[0];
	
	a[0]=n;int c=0;
	for(int i=1;i<=n;i++){
		if(lena<i) a[i]=0;
		if(lenb<i) b[i]=0;
		
		a[i]+=b[i]+c;c=0;
		if(a[i]>=10){
			c=a[i]/10;
			a[i]=a[i]%10;
			if(i==n) a[0]++;
		} 
	}

} 
void mul_a(int a[],int b[],int n){
	int c=0;
	int k=a[0];
	b[0]=k;
	for(int i=1;i<=k;i++){
		b[i]=a[i]*n+c;c=0;
		if(b[i]>=10){
			c=b[i]/10;b[i]=b[i]%10;
		}
		if(i==k &&c!=0){
			b[0]=a[0]+1;
			b[k+1]=c;c=0;
				
		} 
	}

}
void mul_b(int a[],int n){
	int b[100],c[100];
	int k=n%10;
	n=n/10;
	mul_a(a,b,k);
	mul_a(a,c,n);

	for(int i=c[0];i>0;i--){
		c[i+1]=c[i];
	}
	c[1]=0;c[0]++;

	Add(b,c);
	
	memcpy(a,b,sizeof(b));

}
int main(){
	int n;
	cin>>n; 
	int sum[100]={0},s[100]={0},temp[100]={0}; 
	sum[0]=1;sum[1]=0;
	//temp[0]=1;temp[1]=0;
	s[0]=1;s[1]=1;
	
	for(int i=1;i<=n;i++){
		if(i<10){
			mul_a(s,temp,i);
			memcpy(s,temp,sizeof(temp));
			
		}else{
			mul_b(s,i);
		}
		for(int i=s[0];i>0;i--){
			cout<<s[i];
		}
		cout<<endl;
		
		Add(sum,s);
	}
	
	for(int i=sum[0];i>0;i--){
		cout<<sum[i];
	}
	cout<<endl;
	return 0;
}
2022/2/24 08:25
加载中...