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来代表数列中的项。


  • 相关阅读:
    网络流练习
    Noip2018 游记
    4719: [Noip2016]天天爱跑步
    1875: [SDOI2009]HH去散步
    P2619 [国家集训队2]Tree I
    1493: [NOI2007]项链工厂
    P1710 地铁涨价
    P3694 邦邦的大合唱站队
    P1439 【模板】最长公共子序列
    P1132 数字生成游戏
  • 原文地址:https://www.cnblogs.com/mrbourne/p/9959499.html
Copyright © 2011-2022 走看看