用c语言写的一个求阶乘的程序,最大智能求15的阶乘,该怎么改扩大范围,求大侠来帮忙

#include<stdio.h>
int main()
{
int i,j,t;
i=1,t=1;
printf("请输入\n");
scanf("%d",&j);
while(i<j)
{
i=i+1;
t=t*i;
}
printf("%d的阶乘为%d\n",j,t);
return 0;
}

这个有点麻烦了. 跟普通的法子不大一样.
你要用数组来模拟运算.
我这边有一个大整数阶乘的程序,你试试看可能看懂!
不行就百度去,大整数阶乘做关键字,很多的.

#include "stdio.h"
#include "stdlib.h"
#include "memory.h"
#include "math.h"
#include "malloc.h"

void calcFac(int n)
{
int i,j,head,tail;
int blkLen=(int)(n*log10((n+1)/2)); //计算n!有数数字的个数
blkLen+=4; //保险起见,多加4位
if (n<1)
{
printf("%ld!=0\n",n);
return;
}
char *arr=(char *)malloc(blkLen);
if (arr==NULL)return ;
memset(arr,0,sizeof(char)*blkLen);
head=tail=blkLen-1;
arr[tail]=1;
for (i=2; i<=n; i++)
{
int c=0;
for (j=tail; j>=head; j--)
{
int prod=arr[j] * i +c;
arr[j]=(char)( prod % 10);
c= prod / 10;
}
while (c>0)
{
head--;
arr[head]=(char)(c % 10);
c/=10;
}
}
for (i=head; i<=tail; i++)
printf("%c",arr[i]+'0');
printf("\n");
free(arr);
}

int testCalcFac()
{
int n;
while ( scanf("%d",&n)!=EOF)
{
if (n==0)
return -1;
calcFac(n);
}
}

int main(int argc, char* argv[])
{
testCalcFac();
return 0;
}追问

我是个菜鸟啊,刚刚学,看不太懂,大侠见谅。
我尝试把int 改成double,结果出来的居然是负数,这是为什么啊?

追答

哪个地方的int?说清楚呀. int和double啥的 不能把格式弄乱,两个很不一样的.

追问

#include
int main()
{
double i,j,t;
i=1,t=1;
printf("请输入\n");
scanf("%d",&j);
while(i<j)
{
i=i+1;
t=t*i;
}
printf("%d的阶乘为%d\n",j,t);
return 0;
}

追答

你既然把j定义为double型,为何还要用%d接收???这两个格式差很多,不能乱用的.
以后也要注意.
你可以试试
printf("%f\n",3);
想告诉你的是,这两个格式差的很多.一定不要混用!

追问

谢谢大侠,晚辈还有一事相求,能收晚辈为徒吗?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-22
#include<stdio.h>
int main()
{
double t;
int i,j;
i=1,t=1;
printf("请输入\n");
scanf("%d",&j);
while(i<j)
{
i=i+1;
t=t*i;
}
printf("%d的阶乘为%lf\n",j,t);
return 0;
}