50分,用了高精度,c++
查看原帖
50分,用了高精度,c++
1199889
IAKpoki楼主2024/4/17 20:42

有乱码;

#include<bits/stdc++.h>
using namespace std;
string arr[60];
int arr1[999];
int arr2[999];
int arr3[9999];
string sum[60];
string cheng(string a,string b){
	int len1=a.size();
	int len2=b.size();
	for(int i=0;i<len1;i++){
		arr1[i]=a[len1-1-i]-'0';
	}
	for(int i=0;i<len2;i++){
		arr2[i]=b[len2-1-i]-'0';
	}
	int len=len1+len2-1;
	for(int i=0;i<len1;i++){
		for(int j=0;j<len2;j++){
			arr3[i+j]+=arr1[i]*arr2[j];
		}
	} 
	for(int i=0;i<len;i++){
			
		arr3[i+1]+=arr3[i]/10;
		arr3[i]%=10;
		
	}
	if(arr3[len]){
			len++;
	}
	string s="";
	for(int i=len-1;i>=0;i--){

		s=s+(char)(arr3[i]+'0');
	}
	for(int i=0;i<=len;i++){
		arr1[i]=0;
		arr2[i]=0;
		arr3[i]=0;
	}
    return s;
}
int sum1[1000];
int sum2[999];
string jia(string a,string b){
	int len1=a.size();
	for(int i=0;i<len1;i++){
		sum1[i]=a[len1-i-1]-'0';
	}
	int len2=b.size();
	for(int i=0;i<len2;i++){
		sum2[i]=b[len2-i-1]-'0';
	}
	int len=max(len1,len2);
	for(int i=0;i<len;i++){
		sum1[i]+=sum2[i];
		sum1[i+1]+=sum1[i]/10;
		sum1[i]%=10;
	}
	if(sum1[len]){
		len++;
	}
	string s="";
	for(int i=len-1;i>=0;i--){
		s=s+(char)(sum1[i]+'0');
	}
	for(int i=0;i<=len;i++){
		sum1[i]=0;
		sum2[i]=0;

	}
	return s;
}
int main(){
	arr[1]="1";
	sum[1]="1";
	int n;
	cin>>n;
	for(int i=2;i<=n;i++){
		string i2="";
		i2+=(i+'0');
		arr[i]+=cheng(arr[i-1],i2);
		sum[i]=jia(sum[i-1],arr[i]);
	}
	cout<<sum[n];
	return 0;
} 

^_^

2024/4/17 20:42
加载中...