作者的话:
只要掌握了循环结构就没什么问题了。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
分析
题意
> 题目:你马上要写完作业了,可是有一道题困住了你。题目要求你写出不大于 nnn 的正整数的阶乘的和,但每个正整数相隔 333(即求 1!+4!+7!+⋯+n!1! + 4! + 7! + \cdots + n!1!+4!+7!+⋯+n!的和)。现在给出整数 nnn,按上面要求输出阶乘之和 xxx 。
要做这道题,需要知道阶乘公式。
> 阶乘公式:n!=1×2×3×⋯×(n−1)×nn! = 1\times2\times3\times\cdots\times(n-1)\times nn!=1×2×3×⋯×(n−1)×n。
所以,这道题实际上在求 1+(1×2×3×4)+(1×2×3×4×5×6)+⋯+(1×2×3×⋯×(n−1)×n)1+ (1\times2\times3\times4)+(1\times2\times3\times4\times5\times 6)+\cdots+(1\times2\times3\times\cdots\times(n-1)\times n)1+(1×2×3×4)+(1×2×3×4×5×6)+⋯+(1×2×3×⋯×(n−1)×n) 的值。
思路
我选择写一个mul函数,通过循环来计算单个数字的阶乘,再在主函数内进行for循环来将阶乘累加。
需要注意的是,阶乘函数和各个累加变量一定要用long long类型,因为n的最大可能 272727 已经比 5×10185×10^{18}5×1018更大;还有一点,在主函数中的循环一定是从 111 开始累加,自增数量为 333 ,因为是从 1!1!1! 开始,正整数相隔 333 个数字!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
代码
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2024年10月07日 版本1