階乘之和取模 (25 分)
輸入正整數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; }