[汇总]c语言求大数阶乘
大数的阶乘
#include
void main()
{
int a,b;
int i,j,k,n,carry,count;
unsigned long int result[500]={0};
do
{ a=0;
result[0]=1;
printf("qing shu ru yi ge zheng shu\n");
scanf("%d",&n);
if (n<0)
{
printf("qing chong xin shu ru yi ge zheng shu\n");
continue;}
else if(n==0)
{printf("%d!=%d\n",n,1);}
else
{
for(i=2;i<=n;++i)
{
for(j=0;j<=a;++j)
result[j]*=i;
for(k=0;k<=a;++k)
{
carry=result[k]/100000;
result[k]%=100000;
result[k+1]+=carry;
}
if(result[a+1]>0)
++a;
}
if(result[a]>=10000)
b=5;
else if(result[a]>=1000)
b=4;
else if(result[a]>=100)
b=3;
else if(result[a]>=10)
b=2;
else b=1;
printf("\n%d!=\n",n);
printf("%5d",result[a]);
result[a]=0;
count=1;
for(i=a-1;i>=0;--i )
{
printf("%05d",result[i]);
result[i]=0;
if(++count%10==0)
printf("\n");
}
if(a>=1)
printf("\ngong you %d wei\n",b+a*5) ;
else
printf("\ngong you %d wei\n",b);
printf("\n");
}
}
while(n!=0);
}
写了这么长的东西,把自己都绕迷了。高手几句话就概括了,每句浓缩的都是精华,这就是差距:
#include
int main(void)
{
long a[9000]={1,0},i,c,len,pos=1;
int n;
printf("请输入你要计算阶乘的数:\n");
scanf("%d",&n);
pos=n;
for ( len=1;n>1; n--)
{
for (c=0,i=0; i0)?len++:0;
}
printf("\n\n%d的阶乘:\n",pos);
for( len--,printf("%d",a[len--]);len>=0; len--)
printf("%04d",a[len]);
printf("\n");
return 0;
}