开发者社区> 问答> 正文

C语言题目,for循环嵌套情况下,为何参数m的位置不同,求出的结果不同?

大一小白遇到的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 . . .]()

展开
收起
a123456678 2016-06-07 19:50:43 4279 1
5 条回答
写回答
取消 提交回答
  • 问题表达不清晰

    2020-03-19 10:55:08
    赞同 展开评论 打赏
  • 专注物联网

    问题表达不清晰

    2019-07-17 19:30:54
    赞同 展开评论 打赏
  • 乐于学习与分析

    没有明白想表达什么意思

    2019-07-17 19:30:54
    赞同 展开评论 打赏
  • 软件开发,安全加密

    问题表达不清晰

    2019-07-17 19:30:54
    赞同 展开评论 打赏
  • 我是这么理解的,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 
    2019-07-17 19:30:53
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载