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