阶乘之和 南邮NOJ 1093

阶乘之和

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 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  阅读(120)  评论(0编辑  收藏  举报

导航