王翰桂林:编程的问题

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 18:21:06
帮帮忙,用C语言怎么编写一个求大数的阶乘,比如说20的阶乘

用数组求的,20的阶乘,速度很快
#include <stdio.h>
#include <conio.h>

void main()
{
int a[100], i;
int carrier = 0;
int result;
int num;
int temp;
printf(\"?\");
scanf(\"%d\", &num);
temp = num;
for(i = 0; i < 100; i++) a[i] = -1;
i = 0;
//init the origin array
do{
a[i++] = temp%10;
temp /= 10;
}while(temp != 0);

while(--num > 0) {
i = 0;
while(a[i] != -1) {
result = num * a[i] + carrier;
carrier = result / 10;
a[i++] = result % 10;
}
//if carry occur, operate carray
while(carrier != 0) {
a[i++] = carrier % 10;
carrier /= 10;
}
}
clrscr();
for(i = 99; a[i] == -1; i--);
for(; i >= 0; printf(\"%d\", a[i--]));
}

求阶乘没有更好的办法,只能用递归!

#include<math.h>
#include<stdio.h>
#include<alloc.h>
int mul(int a[],int d,int x)
{ long y=0;int i;
for(i=0;i<d;i++)
{ y+=a[i]*(long)x;
a[i]=y%10000;
y/=10000;
} a[d]=y;
return d+!!y;
}
void main()
{ int n,i,j,d=1,*a;long s;
printf("n=");scanf("%d",&n);
if(n<1||n>9999)return;
s=long((log(2*M_PI*n)/2+n*(log(n)-1))/log(10)+1);
a=(int*)malloc((s/4+1)*sizeof(int));
for(a[0]=i=1;i<=n;i++)
d=mul(a,d,i);
printf("\n%d!=%d",n,a[d-1]);
for(j=d-2;j>=0;j--)
printf("%04d",a[j]);
free(a);
}