c语言中1 20阶乘和装不下,【C/C++】1~20的阶乘之和

一. 前情

能点进这篇文章的,想必也已经知道了C语言和C++语言,以及阶乘的定义,所以在此不赘述了。SUM(1!~20!)这个问题是我在大一学C语言时的一个小题,最近又要把编译器装回来,所以装完之后顺便用这个问题白话白话。   逻辑方面并不难,但主要是溢出的问题,即这个数太大了,用 int 整型变量根本装不下,相当于让你用一张小纸条记圆周率的小数点后100w位的数字,小纸条太小,装不下那么多字。要解决这个问题,你可以选择:1. 找一张很大的大纸条。2. 找好多张小纸条拼起来。 本文用的前者(后者可自行百度“多位整数 大整数 运算”)。

环境:Win7系统。Dev-C++编译器。C++语言。

二. 具体

代码:

#include

using namespace std;

int main()

{

int i=1;

__int64 m=0,j=1;

cout<

for(i;i<21;i++)

{

j*=i;

m+=j;

cout<

}

cout<

return 0;

}

输出结果:

fa695d3b4d281546fecb4246afa62b2c.png

三. 后续

__int64可用long long代替。另外C++ 中的cin与cout函数相当于C语言中的scanf与printf函数,C语言使用者可自行理解。

一开始用 int 整型变量时,在没让程序 printf 出每个数的阶乘得数的情况下,求出结果是 268040729,可通过部分信息证伪,正确结果:

肯定以“3”结尾,即个位数字为3。

肯定是3的倍数。

至少是17位数(实际是19位)。

以上三点自行理解,理解不了就问,但我回答完之后可能会加上:

所以说学编程啊,还是要提高自己的计算与逻辑能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值