1. 程式人生 > 實用技巧 >6-8 簡單階乘計算

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;
}