Loading

6-8 简单阶乘计算


#include <stdio.h>

int num[6000];
void Print_Factorial ( const int N )
{
    if(N < 0 || N > 1000) printf("Invalid input");
    else
    {
        int k = 1;  // 位数
        int t = 0;  // 进位位
        num[0] = 1; // 0!= 1
        int tmp = 0;
           
        // 最基本的乘法运算思想,将临时结果的每位与阶乘元素相乘
        for(int i = 2; i <= N; i ++ )  // 开始阶乘,阶乘元素从 2 开始
        {
            for (int j = 0; j < k; j ++ )
            {
                tmp = num[j] * i + t;  // 相应阶乘中的一项与当前所得临时结果的某位相乘(加上进位)
                num[j] = tmp % 10;  // 更新临时结果的该位上的信息
                t = tmp / 10;  // 看是否有进位
            }
            while(t)  // 如果有进位
            {
                num[k ++ ] = t % 10;  // 新加一位,添加信息。位数+1
                t /= 10;  // 看还能不能进位
            }
        }

        for (int i = k - 1; i >= 0; i -- ) printf("%d", num[i]);
    }
}

int main()
{
    int N;
	
    scanf("%d", &N);
    Print_Factorial(N);
    return 0;
}

posted @ 2020-07-01 21:00  啊哈小张同学  阅读(257)  评论(0)    收藏  举报