求1!+2!+3!
```c
int main()
{
int i = 0;
int n = 0;
int ret = 1;
int sum = 0;
for (n = 1; n <= 3; n++)
{
//ret = 1;
for (i = 1; i <= n; i++)
{
ret = ret * i;
}
sum = sum + ret;
}
printf("sum= %d\n", sum);
return 0;
}
为什么这里不加一个ret=1,输出值就不是9而是15, "for (n = 1; n <= 3; n++)"这一串代码n++后的值赋到下面i<=n那里去吗
在这段代码中,ret是计算每个阶乘的结果,而sum是把所有阶乘的结果加起来的和。如果在计算下一个阶乘之前没有将ret重置为1,那么在计算后面的阶乘时,ret的值将保留之前的结果,从而导致错误的计算。所以在每次计算一个新的阶乘时,需要将ret重置为1。
至于您的第二个问题,n++后的值会被赋给下一次循环的n,不会影响内层循环的i的范围。在每一次外层循环时,内层循环都会重新从1开始执行,所以i的范围仍然是1到n。