(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A等天晴

谢谢哥

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值