算法:
1.输入n,求n的阶乘。
2.定义一个大的数组。 a[1000]或a[3000].
3.在for循环i:1~n里,作为乘数。
4.再写一个for循环,j从0到3000,a[ j ]作为被乘数,执行s=i*a[j] +c, a[j]=s%10, c=s/10;原理是用for循环i中的每一个i与a[j]数组所表示的数相乘,a[j]的每一个元素记录一位数,
具体过程见如下。
5.输出。
假设在i=23,a[0]=4,a[1]=3,a[2]=2,a[3]=1;
2 3
* 1 2 3 4
执行s = 23 * 4 + c = 92 (c的初始值是零);
a[0]=s%10=2;
c=s/10=9;
s=23*3+c=78;
a[1]=s%10=8;
c=s/10=7;
s=23*2+c=53;
a[2]=s%10=3;
c=s/10=5;
s=23*1+c=28;
a[3]=s%10=8;
c=s/10=2;
s=23*0+c=2;(输入n时要对数组进行初始化)
a[4]=s%10=2;
c=s/10=0;
.
.
.
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,s,c;
int a[3000];
int n;
while(~scanf("%d",&n))
{
memset(a,0,sizeof(a));
a[0]=1;
for(i=2; i<=n; i++)
{
c=0;
for(j=0; j<3000; j++)
{
s=a[j]*i+c;
a[j]=s%10;
c=s/10;
}
}
if(n==0)
printf("0");
else
for(i=2999; i>=0; i--)
{
if(a[i])
break;
}
for(j=i; j>=0; j--)
printf("%d",a[j]);
printf("\n");
}
return 0;
}