C语言同样1到20的阶乘求和,单循环和双循环的结果为什么不一样?

双循环的

#include <stdio.h>
void main()
{
int i,j;
double k=1,s=0;
for(i=1;i<=20;i++)
{
for(j=1;j<=i;j++)
k=k*j;
s=s+k;
}
printf("%1!+2!+3!+4!...+20!=%.0f\n",s);
}
单循环的

#include <stdio.h>
int main()
{int i;
double s=0,k=1;
for(i=1;i<=20;i++)
{
k=k*i;
s=s+k;
}
printf("1!+2!+3!+4!...+20!=%.0f\n",s);
}

你用双循环的时候,k没有重新置1,导至出错,应该是这样的:
for(i=1;i<=20;i++)
{
k=1; //你漏了这一句
for(j=1;j<=i;j++)
k=k*j;
s=s+k;
}追问

开始double k=1了啊

追答

开始是K=1,可是每次求阶乘之前,你不重置1,那结果不是一直被累加了吗?比如你1*2=2,下次本来应该求的是1*2*3,但是由于你没有重新置1,那第二轮的时候,k的初始值不就是2了吗?那第二轮执行完,结果不是成了2*1*2*3了吗

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-09

双循环中,j++循环时计算阶乘的,要在之前初始化k=1, 就是

double k,s=0.0L; 
for(i=1;i<=20;i++)

    k=1.0L;
    for(j=1;j<=i;j++) 
        k=k*j; 
    s=s+k; 
}

第2个回答  2019-01-09
你这个单循环也不对啊,不是累加阶乘求和啊,程序有错误