fzu 1698 大数
//大数
#include <iostream>
using namespace std;
const int MAXN = 100000;
int main()
{
int n, m, j, i;
int a[5000];
while (scanf("%d", &n) != EOF)
{
if (n == 3)
{
printf("1 2\n2\n");
continue;
}
if (n == 4)
{
printf("1 3\n3\n");
continue;
}
m = 2;
j = 0;
while (n >= m)
{
a[j++] = m;
n = n - m;
m++;
}
while (n > 0)
{
for (i = j - 1; i >= 0 && n > 0; --i,--n)
{
a[i]++;
}
}
for (i = 0; i < j; ++i)
{
if (i) {printf(" ");}
printf("%d", a[i]);
}
printf("\n");
int s[10000]={0};
s[0]=1;
int k=0,sj,l;
for(i=0;i<j;i++)
{
sj=0;
for(l=0;l<=k;l++)
{
s[l]=s[l]*a[i]+sj;
sj=s[l]/MAXN;
s[l]%=MAXN;
}
if(sj)
{
k++;
s[k]=sj;
}
}
printf("%d",s[k]);
for(i=k-1;i>=0;i--)
printf("%05d",s[i]);
printf("\n");
}
return 0;
}
浙公网安备 33010602011771号