zoukankan      html  css  js  c++  java
  • C语言经典算法100例-025-求1+2!+3!+...+20!的和

    题目如标题所说,大家一定觉得很简单,确实,求阶乘谁不会啊,完事做个求和不就成了么,我也是这么想的,于是想都不想开始编代码:

    #include <stdio.h>
    #include <stdlib.h>
    //求1到20的阶乘的和
    int main()
    {
        int i,j;
        long int sum,n;
        sum=0;
        for(i=1;i<=20;i++)
        {
            n=1;
            for(j=1;j<=i;j++)
               n*=j;
            //循环后的n为i!
            sum+=n;
        }
        printf("Sum is %ld!
    ",sum);
        return 0;
    }
    程序是没有问题的,结果也是正确的,可是用了双重循环,可不可以只用一个循环呢,当然!注意观察相邻两项的关系,当前项的值等于前一项的值乘以当前循环次数,于是我们修改程序使之更加简洁,便有了如下的程序,时间复杂度降了一个维数...

    #include <stdio.h>
    #include <stdlib.h>
    //求1到20的阶乘的和
    int main()
    {
        int i;
        long int sum,t;
        sum=0;
        t=1;
        for(i=1;i<=20;i++)
        {
            t*=i;   //当前项的值等于前一项的值乘以i
            sum+=t;
        }
        printf("Sum is %ld!
    ",sum);
        return 0;
    }
    另外,一般用t来代表数列中的项。


  • 相关阅读:
    Linux管理用户和组
    const,static,volatile关键字的作用
    Linux 常用命令
    sizeof与strlen的区别
    不使用库函数的字符串处理
    Linux 编译命令参数
    Linux环境变量PATH
    c++ 使用Redis
    二分查找法
    php实现双色球算法
  • 原文地址:https://www.cnblogs.com/mrbourne/p/9959499.html
Copyright © 2011-2022 走看看