求大数的阶乘。比如1000的阶乘。C语言里没有能够存这么大的数据类型。

来源:互联网 发布:全球网络电视在线直播 编辑:程序博客网 时间:2024/05/16 11:01

我的想法是用两个循环,

外层循环从1到n。内层循环求每个数与前面的数的乘积。

#include<stdio.h>
int main()
{
static int a[100000]; //设置一个超大数组来存储乘积结果。
int n;//要求的n的阶乘
int jw;//用来表示进位
int i,j;//控制循环
int len=1;//初始化数组长度为1
int temp;//过程变量
scanf("%d",&n);
a[1]=1;
for(i=2;i<=n;i++)//遍历。从1到n
{
jw=0;
for(j=1;j<=len;j++)//从数组的低位开始乘
{
temp=a[j]*i+jw;//变量存储结果
a[j]=temp%10;//将变量最后一位放入数组。
jw=temp/10;//表示除了最后一位需要进位的数
if(j>=len && jw!=0)
len++; //数组长度加一
}

}
for(i=len;i>=1;i--)//逆序输出数组就是结果
printf("%d",a[i]);
printf("\n");
return 0;
}

这是运行测试的结果,完全正确。

(初次写,希望多多支持)

1 0