C语言问题··帮助解决下

来源:百度知道 编辑:UC知道 时间:2024/05/31 12:05:40
求1+2!+3!....+20!
代码如下··
main()
{
long int i,j,s,q,n;
q=1;
s=0;
i=1;
for(n=1;n<=20;++n);
{s=s+q;
q=n*q;
}
printf("s=%d\n",s);
}
大家帮我看看有什么问题
我换成FLOAT
打印是用%f
结果是s=1.00000
.............
你用的那个return什么的我还没学过
只知道while for if 这些东西

或者不用函数怎么算
正确答案是
main()
{
float s=0,t=1;
int n;
for(n=1;n<=20;n++)
{
t=n*t;
s=s+t;
}
printf("%e\n",s);
}
两个就是FOR中间的顺序颠倒
为什么顺序颠倒后就不一样呢

你求出的是20!,而不是1!+2!+3!....+20!
你可以考虑使用两重循环来达到目的。外循环从1循环到20,里面的循环则具体实现阶乘。

20!是个很大的数字,用LONG INT是保存不下的

问题是你根本没有计算阶乘

阶乘还是应该用一个函数来算
long Fa(int a)
{
if(a==1)return 1;
return Fa(a-1)*a;
}
然后代到里面计算。
for(n=1;n<=20;++n);
{
s=s+Fa(n);
}

我写一个 没有测试
#include<stdio.h>

int main(void)
{
long i,j,k,sum=0;
for(i=1;i<=20;i++)
{
k=1;
for(j=1;j<=i;j++)
{
k=k*j;
}
sum=sum+k;
}
printf("%ld",sum);
return 0;
}

#include"stdio.h"
void main()
{
double result=0,sum;
int i,j;
for(i=1;i<=20;i++)
{
sum=1;
for(j=1;j<=i;j++) sum=sum*j;
result=result+sum;
}
printf("%16.0lf\n",result);
}

1.结果很大,要用double类型才能放下;
2.一重循环不好实现,用两重循环思路更清晰些;