只AC了第一个,请各位大神帮忙检查!
查看原帖
只AC了第一个,请各位大神帮忙检查!
345095
fhzzxxx楼主2021/1/1 11:21
#include<bits/stdc++.h>
using namespace std;
void cai(int n,int a[]){//贪心分解数 
	int m=0,i;
	for(i=2;i<n;i++){
		a[i]=i;
		m+=i;
		if(m>n) break;
	} //从2开始加,一直加到超过“n” 
	if(m-n==1){ 
	a[i]=0;
	i++;
	a[i]=i;
	a[2]=0;//如果只超了1,就去掉2和最后一个,并往后加一个。 
		}else 	a[m-n]=0;//其它情况直接去提多出的来那个数。 
}
void chen(int a,int m[]){
	int mm[100000]={0},x;
	for(x=99999;x>0;x--){
		mm[x]+=m[x]*a%10;
		mm[x-1]+=m[x]*a/10;
		if(mm[x-1]>=10) {
			mm[x-2]+=mm[x-1]/10;
			mm[x-1]=mm[x-1]%10;
		}
	}
	for(x=99999;x>0;x--){
		m[x]=mm[x];
	}
}//高精数字乘 
int main(){
	int n,m[100000]={0},i,j,k,a[200]={0};
	cin>>n;
	if(n==3) {//特判3 
		cout<<1<<" "<<2<<endl;
		cout<<2;
		return 0;
	}
	if(n==4) {//特判4 
		cout<<1<<" "<<3<<endl;
		cout<<3;
		return 0;
	}
	cai(n,a);//拆数 
	m[99999]=1;
	for(i=2;i<200;i++) if(a[i]!=0) chen(a[i],m);//从保存的拆数数组中逐个乘。 
	if(a[2]!=0) cout<<a[2]; else {
		cout<<a[3];
		a[3]=0;
	}//输出第一个,考虑到最后一个不留空格而设定的。 
	for(i=3;i<200;i++) if(a[i]!=0) cout<<" "<<a[i];
	cout<<endl;
	j=0;
	while(m[j]==0){
		j++;
	}
	for(;j<100000;j++) cout<<m[j];//输出乘积 
	return 0; 	
}
2021/1/1 11:21
加载中...