• 阶乘之和 南邮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
    ");
        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;效率和溢出都不成问题了。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    最长递增子序列
    Mit os Lab 2. Memory Management
    [ZZ]实现c协程
    Linux socket IO模型
    emacs简单入门
    令牌桶-流量控制
    GNU Makefile tips
    Linux atomic memory access
    [zz]Linux系统相关shell命令
    state thread
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965782.html
Copyright © 2020-2023  润新知