把用数组每一个元素表示结果的每一位,下标越低表示位数越低。按照阶乘定义把从2~N每一个数相乘,按照乘法定义两个数相乘就是把其中一个数乘以另一个数每一位,加上进位。这就是两层循环的意思。
#include <stdio.h>SWWQWERARR
#define N 3000
void factorial(int num,int *arr,int n)
{
arr[0]=1;
int i,j;
for(i=2;i<=num;i++)
{
int c=0;
int tmp;
for(j=0;j<n;j++)
{
tmp=arr[j]*i+c;
arr[j]=tmp%10;
c=tmp/10;
}
}
}
int main()
{
int arr[N]={0};
int i;
int num;
scanf("%d",&num);
factorial(num,arr,N);
for(i=N-1;arr[i]==0;i--);
printf("i: %d\n",i);
for(;i>=0;i--)
printf("%d",arr[i]);
return 0;
}