首页 > 代码库 > 求一百的阶乘(极简)

求一百的阶乘(极简)

 

#include<stdio.h>
int main()
{
    int a[512] = { 0 }, l, i, j, t;           //利用a[512]数组来存放求得的阶乘结果,l为阶乘结果的数位。列如,4!=12,则l=2。6!=360,则l=3。
    a[511] = 1;                               //将数组a[512]初始化,且从后往前存,应为有进位,所以从后往前存比较方便。
    l = 1;                                    
    for (i = 1; i <= 100; i++)                //最外层循环用来求阶乘,循环100次。
    {
        for (j = 1; j <= l; j++)              //数组中的数每个都乘当前的i值,j<l,循环数的长度遍,每一位数都乘以当前值,并把求出来的值取代当前值。
            a[512 - j] *= i;                  
        for (j = 1; j <= l; j++)
        {
            if (a[512 - j] > 9 && j != l)     //把数组中的每一个多位数进位,从数组后面进起,但最前面的不进。
            {
                t = a[512 - j] / 10;
                a[512 - j] %= 10;
                a[512 - j - 1] += t;
            }
            if (a[512 - j] > 9 && j == l)     //把最前面的也进位,但这时数的长度l要加1。
            {
                t = a[512 - j] / 10;
                a[512 - j] %= 10;
                a[512 - j - 1] += t;
                l++;
            }
        }
    }
    for (i = l; i > 0; i--)                   //循环输出数组元素,从a[512-l]开始。
        printf("%d", a[512 - i]);
    
    return 0;
}

 

求一百的阶乘(极简)