题目 1014: [编程入门]阶乘求和

发布时间 2023-04-06 09:17:20作者: ha_1007

求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。

 

1.因为这是阶乘求和,一般的int 类型可能就不够,因此我们利用long long int 类型(不用unsigned long 因为当n为20时,Sn =2561327494111820313)

了,unsigned long的范围不够。

2.求Sn的和,我·用的是两个for循环嵌套

for (int i = 1; i <= n; i++)
    {
        j = 1;   //要在外面for循环执行完一次就初始化一次,要不就带入了内层for循环的值
        for(int m = 0; m < i; m++)  
            j *= (m + 1);    //求出第n个数的n的阶乘
        Sn = Sn + j;  //依次加上阶乘数
    }

3还可以把我这两个for嵌套变为一个

for (int i = 1; i <= n; i++)
    {
        t *= i;
        sum += t;
    }

最终代码

#include <stdio.h>
int main(void)
{
    int n;
    long long Sn = 0, j=1;
     
    scanf("%d", &n); 
     
    for(int i=1;i<=n;i++)
    {
        j=j*i;
        Sn=Sn+j;
    }
    // for (int i = 1; i <= n; i++)
    // {
    //     j = 1;
    //     for(int m = 0; m < i; m++)
    //         j *= (m + 1);
    //     Sn = Sn + j;
    // }
    printf("%lld", Sn); //long long的格式指定符为%lld
    return 0;
}