最后一个测试点一直是re,不知道什么原因
#include<iostream>
#include<vector>
#include<string>
#include<cstring>
using namespace std;
void mul(string s1,string &ans){
int A[10500],B[10500],c[10060];
memset(c,0,sizeof c);
memset(A,0,sizeof A);
memset(B,0,sizeof B);
for(int i=0;i<s1.length();i++){
A[s1.length()-i]=s1[i]-'0';
}
for(int i=0;i<ans.length();i++){
B[ans.length()-i]=ans[i]-'0';
}
int la=s1.length(),lb=ans.length();
int lc=lb+la;
for(int i=1;i<=la;i++){
for(int j=1;j<=lb;j++){
c[i+j-1]+=A[i]*B[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
}
ans.clear();
if(c[lc]) ans+='0'+c[lc];
for(int i=lc-1;i>=1;i--){
ans+='0'+c[i];
}
}
int main(){
vector<int> num;
vector<int> s;
long long a,sum=0;
cin>>a;
for(int i=2;i<=a;i++){
if(i>=a){
break;
}
num.push_back(i);
a-=i;
}
if(a>0){
for(int j=a;j>0;j--){
int c=num.back()+1;
s.push_back(c);
num.pop_back();
}
}
while(!num.empty()){
int c=num.back();
num.pop_back();
s.push_back(c);
}
string ans;
ans+='1';
while(!s.empty()){
cout<<s.back()<<" ";
string s1;
s1=to_string(s.back());
mul(s1,ans);
s.pop_back();
}
putchar('\n');
cout<<ans;
return 0;
}