天天看點

51nod 1057 N的階乘

1057 N的階乘

51nod 1057 N的階乘
基準時間限制:1 秒 空間限制:131072 KB 分值: 0 難度:基礎題
51nod 1057 N的階乘
 收藏
51nod 1057 N的階乘

 關注

輸入N求N的階乘的準确值。

Input

輸入N(1 <= N <= 10000)      

Output

輸出N的階乘      

Input示例

5      

Output示例

120      

思路:大數處理的經典思路,将大數劃分成N個數組,每個數組的值存的數的長度統一為m,進位為c

最後再進行格式化輸出,巧妙的避開了爆資料範圍的問題。

#include <stdio.h>
#define _MAX 100000000
int main()
{
    int n, i, j, m;
    long long a[10000], c;
    scanf("%d",&n);

    m = 0;
    a[0] = 1;
    for(i = 1; i <= n; i++)
    {
        c = 0;
        for(j = 0; j <= m; j++)
        {
            a[j] = a[j] * i + c;
            c = a[j] / _MAX;
            a[j] %= _MAX;
        }
        if(c > 0)
        {
            m++;
            a[m] = c;
        }
    }
    printf("%lld", a[m]);
    for(i = m - 1; i >= 0; i--)
        printf("%0.8lld", a[i]);
    printf("\n");
    return 0;
}