高精度25分求助!!!
查看原帖
高精度25分求助!!!
917775
_buzhidao_楼主2023/4/10 21:45
#include<bits/stdc++.h>
using namespace std;
short a1[1000],b1[1000],c[1000],lea,leb,lec=1;
string f,g;
void chushihua(string a,string b){
	lea=a.size();
	leb=b.size();
	for(int i=0;i<1000;i++){
		a1[i]=0;
	}
	for(int i=0;i<1000;i++){
		b1[i]=0;
	}
	for(int i=1;i<=lea;i++){
		a1[i]=a[lea-i]-48;
	}
	for(int i=1;i<=leb;i++){
		b1[i]=b[leb-i]-48;
	}
	for(int i=0;i<1000;i++){
		c[i]=0;
	}
}
string jia(string a,string b){
	chushihua(a,b);
	lec=1;
	int x=0;
	while(lec<=lea||lec<=leb){
		c[lec]=a1[lec]+b1[lec]+x;
		x=c[lec]/10;
		c[lec]%=10;
		lec++;
	}
	c[lec]=x;
	while(c[lec]==0&&lec>1){
		lec--;
	}
	string ss="",s1=" ";
	for(int i=lec;i>0;i--){
		s1[0]=c[i]+48;
		ss.append(s1);
	}
	return ss;
}
string cheng(string a,string b){
	chushihua(a,b);
	int x;
	for(int i=1;i<=lea;i++){
		x=0;
		for(int j=1;j<=leb;j++){
			c[i+j-1]=a1[i]*b1[j]+x+c[i+j-1];
			x=c[i+j-1]/10;
			c[i+j-1]%=10;
		}
		c[i+leb]=x;
	}
	lec=lea+leb;
	while(c[lec]==0&&lec>1){
		lec--;
	}
	string z="",y=" ";
	for(int i=lec;i>=1;i--){
		y[0]=c[i]+48;
		z.append(y);
	}
	return z;
}
string int_str(int a){
	int b=a;string s="",ss=" ";
	while(b!=0){
		ss[0]=b%10+48;
		s.append(ss);
		b/=10; 
	}
	return s;
}

short n;string sk,t="0";
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		sk="1";
		for(int j=1;j<=i;j++){
			sk=cheng(int_str(j),sk);
			//cout<<sk<<' ';//
		}
		//cout<<sk<<endl;//
		t=jia(t,sk);
		//cout<<t<<endl;//
	}
	cout<<t;
	return 0;
}

第一次尝试高精度,一定是代码的问题

2023/4/10 21:45
加载中...