再求大家帮我一下
//策略:
//把n分解成2+....+k的形式,
//再把多余的部分分给前面,从后往前分
//用高精度计算所有数的乘积,
//共同输出
#include<bits/stdc++.h>
using namespace std;
int arr[10010],top;
int ans[10000010]={0,1};
void f(int a,int b)
{
if(a<b)
{
if(b==arr[top])
{
for(int i=1;i<=top;i++) arr[i]++;
arr[top]++;
}
else
{
for(int i=top;a!=0;i--) arr[i]++,a--;
}
return ;
}
arr[++top]=b;
f(a-b,b+1);
}
int main()
{
int n;
cin>>n;
if(n==3) {cout<<1<<" "<<2<<endl<<2;return 0;}
if(n==4) {cout<<1<<" "<<3<<endl<<3;return 0;}
f(n,2);
for(int i=1;i<=top;i++)cout<<arr[i]<<" ";
cout<<endl;
int len=1000;
for(int i=1;i<=top;i++)
{
for(int j=1;j<=1000;j++) ans[j]*=arr[i];
for(int j=1;j<=1000;j++) ans[j+1]+=ans[j]/10,ans[j]%=10;
}
// for(int i=1;i<=n;i++)
// {
// cout<<arr[i]<<" ";
// }
while(ans[len]==0) len--;
for(int i=len;i>=1;i--) cout<<ans[i];
return 0;
}