阶乘之和(写完加强版再写解析)

#include<stdio.h>
#include<string.h>
int a[10000], b[10000], c[10000];
int len_a = 0, len_b = 0, len_c = 0;
int main(void)
{
    int n;
    scanf("%d", &n);
    b[1] = 1;
    len_b = 1;

    for (int i = 1; i <= n; i++)
    {
        len_a = 1;
        int m = i;
        while (m != 0)
        {
            a[len_a++] = m % 10;
            m /= 10;
        }

        for (int j = 1; j <= len_a; j++)
        {
            for (int k = 1; k <= len_b; k++)
            {
                c[j + k - 1] += a[j] * b[k];
            }
        }

        len_c = len_a + len_b;

        for (int j = 1; j <= len_c; j++)
        {
            if (c[j] > 9)
            {
                c[j + 1] += c[j] / 10;
                c[j] %= 10;
                if (j == len_c)
                    len_c++;
            }
        }

        for (int j = len_c; c[len_c] == 0; j--)
        {
            len_c--;
        }

        len_b = len_c;
        for (int j = 1; j <= len_c; j++)
            b[j] = c[j];

        memset(c, 0, sizeof(c));
    }

    for (int i = len_b; i >=1; i--)
    {
        printf("%d", b[i]);
    }
    return 0;
}

 

posted @ 2021-01-15 18:58  loliconsk  阅读(188)  评论(0)    收藏  举报