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;
}
}