求救啊,用C语言写20以阶乘,我写的大于9就是负数了

# include "stdio.h"
void main()
{
int n,i,j,sum=0,t=1;
printf("please enter a number:");
scanf("%d",&n);
for(i=0;i<n;t=1,i++) { for(j=n-i;j>0;j--)
{
t*=j;
}
sum+=t ;
}
printf("\n1!+....+%d!=%d",n,sum);
}各位帮我改改,这个大于9出现负数

第1个回答  2013-10-25
你不是求20以内的阶乘?你这个算法好像是1!+2!+...n!# include "stdio.h"void main()
{
int n,i,j; long sum; sum=1; printf("please enter a number:");
scanf("%d",&n);
for(i=1;i<=n;i++) sum*=i ;printf("%d的阶乘是%d",n,sum);
}
如果我理解的不错的话,以上就是程序。如果你是求1!+2!+...+n!的话,就不是了,你的意思是?
第2个回答  2013-10-25
用long double就不会溢出了 # include "stdio.h"
void main()
{
int n,i,j;
long double sum=0; //这里把类型改下
double t = 1;
printf("please enter a number:");
scanf("%d",&n);
for(i=0;i<n;t=1,i++) {
for(j=n-i;j>0;j--)
{
t*=j;
}

sum+=t ;
printf("%d!=%f\n\n",n-i,sum);
}
printf("\n1!+....+%d!=%f",n,sum);
}
第3个回答  2013-10-25
int型最大为327679的阶乘是362880早溢出了将sum改为long或double
相似回答