这是一个求1!+..+20!的程序,有点不理解为什么内循环for里面又定义s=1?这样不就结束一次内循环s=1?
这里是两重循环,里面的那层循环,是计算i的阶乘,s其实是作为阶乘的结果变量,s=1相当于对每一次计算阶乘先初始化。
内循环是计算某个数的阶乘的循环,这个阶乘的结果值是s,所以每次内循环前,需要将结果值初始化为1
否则就和上一个数的阶乘结果累乘了
这个代码有比较大的问题,首先是20阶乘的结果超出int型存储范围,所以s和m应该定义为long long类型;其次不需要双循环,代码效率比较低,运行时间长
每一次都从1开始计算一遍阶乘
如果你不希望这样,代码可以这么修改
int i, s = 1, m = 0;
for (i = 1; i <= 20; i++)
{
s *= i;
m += s;
}
printf("%d", m);