大一小白遇到的C语言题目,为什么对于m的位置不同,求出的结果不同,感觉m的位置对运算没有影响
题目是求1到20的阶乘之和,但是对于M=1在循环中的位置不同,编译器给出的结果也不同。
double i,j,n=0,m;
for(i=1;i<=20;i++){
m=1;
for(j=1;j<=i;j++){
m*=j;
n=m+n;}}
printf("%.0f",n);
![Uploading screenshot . . .]()
我是这么理解的,M是每次计算阶乘的起点,如计算2的阶乘起点是1,计算10的阶乘的起点是1,既然是大一的学生或许我建议一下,取变量名的时候稍微花点心思了,又或许你的教材辅导书就是这么写的。。。
我发现底下有答案提出了不同的解题思路了
我的想法是减少乘的次数,这其中的规律不难发现
2! = 2 * 1!;
3! = 3 * 2!;
...
n! = n * (n-1)!;
所以我们每次可以保留上一次阶乘的结果
以下是伪代码
lastFact = 1 # 1的阶乘就是1
sum = 1 # 一开始就可以将sum置为1
for i in 2..20
lastFact *= i
sum += lastFact
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。