我写的代码有问题吗!求调!
#include<bits/stdc++.h>
using namespace std;
int n,cnt=1,ans[10010]; //cnt表示拆成了几个数,ans表示这cnt个数分别是什么
string s[10010],m="1"; //s存要乘在一起的数,m表示结果
string cheng(string a,string b) //高精乘
{
int na[10010],nb[10010],nc[10010],la=a.length(),lb=b.length();
memset(na,0,sizeof(na));memset(nb,0,sizeof(nb));memset(nc,0,sizeof(nc));
for(int i=la-1;i>=0;i--) na[la-i]=a[i]-'0';
for(int i=lb-1;i>=0;i--) nb[lb-i]=b[i]-'0';
for(int i=1;i<=la;i++)
for(int j=1;j<=lb;j++) nc[i+j-1]+=na[i]*nb[j];
for(int i=1;i<=la+lb;i++)
{
nc[i+1]+=nc[i]/10;
nc[i]%=10;
}
string s;
if(nc[la+lb]) s+=nc[la+lb]+'0';
for(int i=la+lb-1;i>=1;i--) s+=nc[i]+'0';
return s;
}
string change(int x) //整数换成字符串
{
char c[10000],t;
int sum=0;
while(x!=0)
{
c[sum]=x%10+'0';
x/=10;
sum++;
}
for(int j=0,i=sum-1;j<=i/2;j++,i--) swap(c[i],c[j]);
return c;
}
int main()
{
cin>>n;
if(n<=4)
{
cout<<n<<endl<<n<<endl;
return 0;
}
for(int i=2;i<=n;i++)
{
if(n>=i)
{
n-=i;
ans[cnt++]=i;
s[cnt-1]=change(i);
}
}
while(n!=0)
{
for(int i=cnt-1;i>=1;i--)
{
if(n>0)
{
ans[i]++;
s[i]=change(ans[i]);
n--;
}
}
}
for(int i=1;i<cnt;i++)
{
cout<<ans[i]<<" ";
string x=cheng(s[i],m);
m=x;
}
cout<<endl<<m<<endl;
return 0;
}