【悬关】代码求调,样例没过
查看原帖
【悬关】代码求调,样例没过
498360
Leonard_Mitchell楼主2023/7/4 10:28

rt,我自己检查的是高精和转换两个函数没错,但是不知道主函数哪里错了,在线等,急急急

#include<iostream>
#include<queue>
#include<cstring> 
#define ll long long
using namespace std;

const int N=205;

ll n;
ll t[100005];
ll tot;
string s[100005];

string multiplication(string a,string b){
	int A[N],B[N],C[N],la=a.size(),lb=b.size();
	memset(A,0,sizeof A);
	memset(B,0,sizeof B);
	memset(C,0,sizeof C);
	for(int i=la-1;i>=0;i--) A[la-i]=a[i]-'0';
	for(int i=lb-1;i>=0;i--) B[lb-i]=b[i]-'0';
	for(int i=1;i<=la;i++){
		for(int j=1;j<=lb;j++){
			C[i+j-1]+=A[i]*B[j];
		}
	}
	for(int i=1;i<=la+lb;i++){
		C[i+1]=C[i]/10;
		C[i]%=10;
	}
	string l;
	for(int i=la+lb;i>=1;i--){
		if(i==la+lb&&C[i]==0) continue;
		l+=C[i]+'0';
	}
	return l;
	
}

string convert(int k){
	char c[15],m;
	int tt=0;
	while(k!=0){
		c[tt++]=k%10+'0';
		k/=10;
	}
	int p=tt-1;
	for(int i=0;i<tt/2;i++,p--){
		m=c[i],c[i]=c[p],c[p]=m;
	}
	//for(int i=0;i<tt;i++) cout<<c[i];
	return c;
}

int main(){
	cin>>n;
	if(n==3||n==4) cout<<n<<endl<<n;
	else{
		for(int i=2;i<=n;i++){
			if(n>=i){
				n-=i;
				t[++tot]=i;
				s[tot]=convert(i);
			}else break;
		}
		for(int i=tot;i>=1;i--){
			if(n>0){
				n--;
				t[i]++;
				s[i]=convert(t[i]); 
			}
		}
		
		if(n>0){
			t[tot]++;
			s[tot]=convert(t[tot]);
		}
		string m="1";
		for(int i=1;i<=tot;i++){
			cout<<t[i]<<" ";
			m=multiplication(m,s[i]);
		}
		cout<<endl;
		cout<<m;
	} 
}
2023/7/4 10:28
加载中...