阶乘之和 南邮NOJ 1093
阶乘之和
时间限制(普通/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\n");
else
{
for(i=1;i<=n;i++)
{
m*=i;
m=m%MOD;
sum=(sum+m)%MOD;
}
printf("%d\n",sum);
}
return 0;
}其他做法极容易超时,关键点在于:在程序的最前面加上一句if(n>25) n=25;效率和溢出都不成问题了。版权声明:本文为博主原创文章,未经博主允许不得转载。
posted on 2015-01-25 15:53 Tob__yuhong 阅读(107) 评论(0) 收藏 举报
浙公网安备 33010602011771号