输入n,计算S = 1! + 2! + 3! + ...... + n!的末6位(不含前导0)。 n <= 10^6
样例输入:10
样例输出:37913
分析:此题需要注意溢出和时间的问题
溢出解决方案:要计算加法、减法和乘法的整数表达式除以正整数n的余数,可以再每步计算之后对n取余,结果不变。(原理:(a + b) % n = a % n + b % n)
n很大时,时间长的解决方案:注意到25!的阶乘有末尾6个0,则有(a + b) % n = a % n。也就说如果n大于24就相当于只计算n为24。(有兴趣的,可以尝试下没有优化前需要花多长时间)
#include<stdio.h> #include<time.h> int main(){ int n,sum = 0; const int MOD = 1000000; scanf("%d",&n); if(n > 24){ n = 24; } for(int i = 1; i <= n; i++){ int factorial = 1; for(int j = 1; j <= i; j++){ factorial = (factorial * j % MOD); } sum += factorial; } printf("%d\n",sum % MOD); printf("Time used=%.2lf\n",(double)clock()/CLOCKS_PER_SEC); return 0; }
去掉
if(n > 24){ n = 24; }
就可以测试没有优化前需要花多长时间
优化前与优化后的对比(单位s):
相关推荐
1至n各自阶乘之和,适宜初学者代码使用,并非最优仅供参考,谢谢合作
C语言练习题:求1到10的阶乘之和简单实例 #include int factorial(int n) { if(0==n) return 1; if(1==n) return 1; return n*factorial(n-1); } int main() { int n=10; int sum=0; int i; for(i=1;i<=n...
P1009 [NOIP1998 普及组] 阶乘之和(c++)(csdn)————程序
vb 求阶乘之和 源代码vb 求阶乘之和 源代码
可以精确计算 1到 17110之间所有数的阶乘,和阶乘之和,用c语言实现
1至n各自阶乘之和,适宜初学者代码使用,并非最优仅供参考,谢谢合作
运用数组计算阶乘和
求各个阶乘之和,阶乘的倒数之和,求各个阶乘之和,阶乘的倒数之和
可以任意输入开始数字和结束数字,能求得起止数字间的阶乘之和
做一个小的程序,简单的把计算数字用计算机完成
用于计算阶乘之和,,属于初级程序,便于初学者理解体会
1091:求阶乘的和 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 22935 通过数: 17332 【题目描述】 给定正整数n,求不大于n的正整数的阶乘的和(即求1!+2!+3!+...+n!),输出阶乘的和。 【输入】 输入有一行,...
此java程序时计算1到20 的阶乘的和,即1!+2+3!+4!+5!+6!+7!.......19!+20! 如果你稍微改下就可以只算阶乘!
c语言 计算1!+2!+...+n!
初学者可以多找一点类似于这种练习题做做,本题是我们老师发的标准答案,计算一到十的阶乘和
提供了两种求阶乘和的方法,其中一种是用了嵌套调用,这种方法值得学习
求30的阶乘会产生溢出,因此采用这种方法适用于任何一种求阶乘。
求阶乘
java阶乘阶乘阶乘阶乘阶乘阶乘阶乘阶乘阶乘阶乘阶乘阶乘阶乘阶乘阶乘阶乘阶乘阶乘阶乘阶乘
从1到n的阶乘求和,通过for循环来实现,如果代码中有什么错误,请指出,谢谢!