这个有点麻烦了. 跟普通的法子不大一样.
你要用数组来模拟运算.
我这边有一个大整数
阶乘的程序,你试试看可能看懂!
不行就百度去,大整数阶乘做关键字,很多的.
#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);
想告诉你的是,这两个格式差的很多.一定不要混用!
追问谢谢大侠,晚辈还有一事相求,能收晚辈为徒吗?