75分,似乎是高精加有问题,求帮助
查看原帖
75分,似乎是高精加有问题,求帮助
1422255
zsl20130325楼主2025/6/16 15:23
#include<bits/stdc++.h>
using namespace std;

struct long_int{
	long long a[101],len;
}a,sum;

long_int add(long_int a,long_int b){
	long_int sum;
	sum.len=max(a.len,b.len);
	sum.a[sum.len]=0;
	for(int i=sum.len;i>=1;i--){
		sum.a[i-1]=0;
		sum.a[i+1]+=(a.a[i]+b.a[i])/10;
		sum.a[i]+=(a.a[i]+b.a[i])%10;
	}
	if(sum.a[sum.len+1]){
		sum.len++;
	}
	return sum;
}

long_int mul(long_int a,int b){
	long_int pro;
	pro.len=a.len;
	for(int i=100;i>=pro.len;i--){
		pro.a[i]=0;
	}
	for(int i=pro.len;i>=1;i--){
		pro.a[i-1]=0;
		pro.a[i+3]+=(a.a[i]*b)/1000;
		pro.a[i+2]+=(a.a[i]*b)/100%10;
		pro.a[i+1]+=(a.a[i]*b)/10%10;
		pro.a[i]+=(a.a[i]*b)%10;
	}
	if(pro.a[pro.len+2]){
		pro.len+=2;
	}
	else if(pro.a[pro.len+1]){
		pro.len++;
	}
	return pro;
}

int main(){
	int n;
	a.a[1]=1;
	a.len=1;
	cin>>n;
	if(n==0){
		cout<<0;
		return 0;
	}
	if(n==1){
		cout<<1;
		return 1;
	}
	for(int i=1;i<=n;i++){
		a=mul(a,i);
		sum=add(a,sum);
		for(int i=a.len;i>=1;i--){
			cout<<a.a[i];
		}
		cout<<endl;
	}
	for(int i=sum.len;i>=1;i--){
		cout<<sum.a[i];
	}
}
2025/6/16 15:23
加载中...