求解大数阶乘 【C语言】

2018-10-22  本文已影响0人  善法

题目

编写一个算法,计算 2018 的阶乘

代码

/* 设计思路:自底向上迭代求值 */

#include <stdio.h>
#define maxSize 6000

int main()
{
    int n; // 计算n的阶乘
    // 新建短整型数组a[maxSize+1]:a[0]存放有效数据长度、a[1-maxSize]存放数据
    short a[maxSize+1];
    while(scanf("%d", &n))
    {
        a[0]=1;a[1]=1;
        for (int i=2; i<=n; i++)
        {
            for (int j=1; j<=a[0]; j++)
                a[j] *= i;
            for (int j=1; j<=a[0]; j++)
            {
                short carry = a[j]/10;
                if (j == a[0])
                {
                    if (carry)
                        a[0]++;
                    a[j+1] = carry;
                }
                else
                    a[j+1] += carry;
                a[j] %= 10;
            }
        }
        for (int i=a[0]; i>=1; i--)
            printf("%hd", a[i]);
        printf("\n");
    }
}
上一篇 下一篇

猜你喜欢

热点阅读