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

posted on 2009-04-14 21:25  ZAFU_VA  阅读(159)  评论(0)    收藏  举报

导航