• 递推求阶乘大数


    #include<stdio.h>
    #include<malloc.h>
    #define MAXN 1000
    
    void pnext(int a[], int k)
    {
        // 这里的m代表有几位
        int *b, m = a[0];
        int i, j, r, carry;
        b = (int *)malloc(sizeof(int) * (m + 1));
        // b 相当于把前面的值保存下来
        for (i = 1; i <= m; i++)
        {
            b[i] = a[i];
        }
    
        // 多加k次
        for (j = 1; j < k; j++)
        {
            // carry 进位值
            for (carry = 0, i = 1; i <= m; i++)
            {
                r = (i <= a[0] ? (a[i] + b[i]) : a[i]) + carry;
                a[i] = r % 10;   // 个位数
                carry = r / 10;  // 求其是否还有高位
            }
            if (carry != 0)
            {
                a[++m] = carry;
            }
        }
        free(b);
    
        // 更新 m
        a[0] = m;
    }
    
    // 计算k!
    void write(int *a, int k)
    {
        printf("%4d! =", k);
        for (int i = a[0]; i > 0; i--)
        {
            printf("%d", a[i]);
        }
        printf("
    ");
    }
    void main()
    {
        int Num[MAXN], n;
        printf("Enter the number n:");
        scanf("%d", &n);
        Num[0] = 1;
        Num[1] = 1;
        write(Num, 1);
    
        for (int i = 2; i <= n; i++)
        {
            pnext(Num, i);
            write(Num, i);
        }
    }
  • 相关阅读:
    Codeforces 385C
    Codeforces 496C
    HDU 6114 Chess
    Codeforces 839B
    Codeforces 483B
    Codeforces 352B
    Codeforces 768B
    Codeforces 38B
    Codeforces 735B
    Codeforces 534B
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12537822.html
Copyright © 2020-2023  润新知