输入正整数n, 计算S = 1!+2!+...+n!的末6位(不含前导0). 这里1<=n<=109​​.

输入样例:

例如输入:

20

输出样例:

输出:

820313

题解:我看道这个题的第一想法就是用暴力求解,但是最后一组数据时间超限了,然后我就打了一个表,发现当n>=24时,后面六位数都是一样的。所以就有了下面这个代码。

#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;

int main()
{
    long long n,sum=0,tmp=1;
    scanf("%lld",&n);
    if(n>=24)        //当n>=24时,后面的数据都是一样的
    {
        printf("940313\n");
        return 0; 
    }
    for(long long i=1;i<=n;i++)
    {
        sum=(sum+tmp)%1000000;        
        tmp=(tmp*((i+1)%1000000))%1000000;        
    }
    cout<<sum<<endl;
    return 0;
}

 

相关文章:

  • 2021-11-23
  • 2021-12-18
  • 2021-12-11
  • 2022-01-06
  • 2021-12-31
  • 2021-12-14
  • 2021-11-23
  • 2021-12-01
猜你喜欢
  • 2021-07-03
  • 2021-10-31
  • 2022-12-23
  • 2022-12-23
  • 2021-11-22
  • 2022-01-07
相关资源
相似解决方案