(c语言1)阶乘求和

输入格式

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

输入格式

n

输出格式

Sn的值

样例输入

5

样例输出

153

题解

然后直接先上题解

#include<stdio.h>
int main()
{
    int n,a=1;
    long long sum=0,m=1; //为这是阶乘求和,一般的int 类型可能就不够,因此我们利用long long int 类型
    scanf("%d",&n); //输入需要乘到多少的阶乘
    for(a=1;a<=n;a++) //利用循环加1
    {
        m=a*m;  //一个循环利用上一个阶乘的结果加1直接乘
        sum=sum+m; //阶乘求和
    }
    printf("%lld",sum); //输出和
	return 0;
}

分析

前面的int一般就是拿来控制循环的,定量n就是为了scanf的输入。

我们先来讲一下这个循环,

for(a=1;a<=n;a++)
    {
        m=a*m;
        sum=sum+m;
    }

我们一开始已经定义了a的值和输出了n的值

这个循环就是为了让它m的值可以一直乘(a++),就可以达到阶乘的效果。 

sum也在循环里,因此每循环一次就可以实现加上上一个数的和

直到a与n的值相同,就刚好实现阶乘总和后退出循环

前面之所以使用 

long long sum=0,m=1;

是因为我相信很多童鞋一开始也是想使用简单的用“%d"来输出sum

但是结果是

 很显然哈,前面的测试点能过,而后面的过不了,很多童鞋就大概就猜到是后面的输出有问题。

突然想到n如果等于20,那这个值肯定非常大

long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808

所以我一开始就只把sum用 long long 来定义

但是结果如上,还是相同的报错,又看到有个m,自然m的值肯定也是相当大的

所以 sum 和 m 我都用了 long long 来定义

最后这个输出

printf("%lld",sum);

注意哈,用了 long long 来定义,这个输出的”%lld",里面不是数字11哈,是L的小写。

本题出自C语言网的题号1014

猜你喜欢

转载自blog.csdn.net/a871923942/article/details/130613049
今日推荐