基本思路:从最大数开始,与数组中每一个数相乘,并取余保留更新数组
#include<stdio.h>
#include<string.h>
char c[10000];
void bignum(int x)
{
int a[10000]={0},k,m=0,i;
a[0]=1;
while(x>0)
{//m为在求阶乘过程中a的元素个数
for(k=i=0;i<=m;i++)
{
k=k+a[i]*x;//数组各个元素均乘以x(x递减),以完成阶乘的运算
a[i]=k%10;
k/=10;
}
while(k)
{
a[++m]=k%10;
k/=10;
}
x--;
}
for(i=0;i<=m;i++)//阶乘的结果转化为字符型
c[i]=a[m-i]+'0';
}
int main()
{
int x;
while(~scanf("%d",&x))
{
bignum(x);
printf("%s\n",c);
memset(c,0,sizeof(c));
}
return 0;
}