看不懂循环
//1到20阶乘的和#include<stdio.h>
int main()
{
double i,sum=0,j=1;
for(i=1;i<=20;i++)
{
j=j*i;
sum=sum+j;
}
printf("%lf",sum);
return 0;
}
我看这个for语句后j=j*i;不是只有20的阶乘么 为什么是能求1-20的阶乘和吗
后面不是把每次都把j加到sum上了么j是阶乘,sum是阶乘的和啊 sum是1到20的阶乘的和呀!!循环里面j每做一次阶乘,sum就加一次刚才做的阶乘,一直到20,你可以吧i调成单位数测试一下,也输出一下j 。 #include<stdio.h>
int main(void)
{
double i,sum=0,j=1;
for(i=1;i<=3;i++)
{
j=j*i;
sum=sum+j;
}
printf("sum=%lf,j=%lf\n",sum,j);
return 0;
}
//sum=9.000000,j=6.000000
lingnuous 发表于 2021-4-19 17:38
sum是1到20的阶乘的和呀!!循环里面j每做一次阶乘,sum就加一次刚才做的阶乘,一直到20,你可以吧i调成单 ...
我不明白为啥j=j*i能一直循环到i,j=j*i不是只成了一次嘛 yuxijian2020 发表于 2021-4-19 17:28
后面不是把每次都把j加到sum上了么j是阶乘,sum是阶乘的和啊
我不明白为啥j=j*i能一直循环到i,j=j*i不是只成了一次嘛,就比如到i等于3的时候不就是1*3吗,怎么做阶乘呢
qqqpang 发表于 2021-4-19 19:45
我不明白为啥j=j*i能一直循环到i,j=j*i不是只成了一次嘛,就比如到i等于3的时候不就是1*3吗,怎么做阶乘 ...
看不懂的时候就做分解
i 从1 到 20 这个应该是没问题
那就分开来看呗
i = 1:
j = j * i; 此时j = 1 * 1--> j = 1
sum = sum + j; 此时 sum = 0 + 1;--> sum = 1
i = 2:
j = j * i; 此时j = 1 * 2--> j = 2
sum = sum + j; 此时sum = 1 + 2-->sum = 3
这种分步解析会把,自己分析下去
j = 1 * 2 * 3 * 4 * ... * 20
因为 j 每次都会乘以之前的结果,所以 j 最后的结果就是阶乘的结果
sum = 1 + 2 + 6 + 24 + ... + 2432902008176640000
因为 sum 每次都会加上上一次阶乘的结果,所以sum最后的值就是所有阶乘的和
页:
[1]