【C/C++】1~20的阶乘之和
程序员文章站
2022-04-08 23:10:49
一. 前情 能点进这篇文章的,想必也已经知道了C语言和C++语言,以及阶乘的定义,所以在此不赘述了。SUM(1!~20!)这个问题是我在大一学C语言时的一个小题,最近又要把编译器装回来,所以装完之后顺便用这个问题白话白话。 逻辑方面并不难,但主要是溢出 ......
一. 前情
能点进这篇文章的,想必也已经知道了c语言和c++语言,以及阶乘的定义,所以在此不赘述了。sum(1!~20!)这个问题是我在大一学c语言时的一个小题,最近又要把编译器装回来,所以装完之后顺便用这个问题白话白话。
逻辑方面并不难,但主要是溢出的问题,即这个数太大了,用 int 整型变量根本装不下,相当于让你用一张小纸条记圆周率的小数点后100w位的数字,小纸条太小,装不下那么多字。要解决这个问题,你可以选择:1. 找一张很大的大纸条。2. 找好多张小纸条拼起来。 本文用的前者(后者可自行百度“多位整数 大整数 运算”)。
环境:win7系统。dev-c++编译器。c++语言。
二. 具体
代码:
#include<iostream> using namespace std; int main() { int i=1; __int64 m=0,j=1; cout<<"sum(1!~20!)"<<endl<<"=0"; for(i;i<21;i++) { j*=i; m+=j; cout<<"+"<<j; } cout<<endl<<"="<<m<<endl; return 0; }
输出结果:
三. 后续
__int64
可用long long
代替。另外c++ 中的cin
与cout
函数相当于c语言中的scanf
与printf
函数,c语言使用者可自行理解。
一开始用 int 整型变量时,在没让程序 printf 出每个数的阶乘得数的情况下,求出结果是 268040729,可通过部分信息证伪,正确结果:
- 肯定以“3”结尾,即个位数字为3。
- 肯定是3的倍数。
- 至少是17位数(实际是19位)。
以上三点自行理解,理解不了就问,但我回答完之后可能会加上:
所以说学编程啊,还是要提高自己的计算与逻辑能力。
参考资料:
上一篇: 对不起,我走不进你的世界,886
下一篇: 我发誓,以后见小偷一次打一次