【发布时间】:2013-05-16 13:42:12
【问题描述】:
我正在尝试计算 c 中非常大的数字的阶乘,例如 100!..通过在计算阶乘中的位数后动态分配内存: 我的代码是:
int main()
{
int n,q,i,j,z,t,d;
float p=0.0;
printf("Enter the number whose factorial is to be calculated:\n");
scanf("%d",&n);
//calculating number of digits
for(j=2;j<=n;j++)
p=p+log10(j);
d=(int)p+1;
printf("No of digits in the factorial are:%d\n",d);
int *a;
a=(int *)malloc(d*sizeof(int));//allocation of memory
a[0]=1;
for(i=1;i<n;i++)//initialize array
a[i]=0;
p=0.0;
for(j=2;j<=n;j++)
{
q=0;
p=p+log10(j);
z=(int)p+1;
for(i=0;i<z;i++)
{
t=(a[i]*j)+q;
q=t/10;
a[i]=t%10;
}
}
printf("\n");
for(i=d-1;i>=0;i--)
{
printf("%d",a[i]);
}
return 0;
}
它提供多达 40 个正确答案!但不是在那之后!我的解决方案有什么问题?
【问题讨论】:
-
@PaulR 我问了你所指的问题,我对它的执行有疑问,因为我测试了多个案例。
-
您可以使用
calloc函数一步完成,而不是分配和清除(以尽可能慢的方式)分配的内存。 -
@Joachim Pileborg:你是对的,但我怀疑算法在 40 以上时无法正常工作!为什么会有问题?
-
您应该真正编辑您的代码以使其更具可读性。那个 for 循环看起来很奇怪。
标签: c arrays algorithm factorial