阶乘之和
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 2176 测试通过 : 526
总提交 : 2176 测试通过 : 526
题目描述
输入n,计算S=1!+ 2!+…+ n!的末6位(不含前导0)。这里,n!表示前n个正整数之积。
输入
输入n,,n≤ 106。
输出
输出S的末6位(不含前导0)。
样例输入
10
样例输出
37913
题目来源
刘汝佳《算法竞赛入门经典》
#include<cstdio> const int MOD=1000000; //定义求余常量 int main() { int i,n,sum=0; static int m=1; scanf("%d",&n); if ( n >= 26 ) //25!末尾有6个0,所以从该项开始,后面的所有项都不会影响和的末6位数字 printf("940313 "); else { for(i=1;i<=n;i++) { m*=i; m=m%MOD; sum=(sum+m)%MOD; } printf("%d ",sum); } return 0; }其他做法极容易超时,关键点在于:在程序的最前面加上一句if(n>25) n=25;效率和溢出都不成问题了。
版权声明:本文为博主原创文章,未经博主允许不得转载。