题目大意:输入n, 求出 1!+2!+…n! 的和的最后6位数。
题目有两个坑点:
1. 阶乘这个东西, 当n很大的时候可能超过int的表示范围。所以需要在求阶乘时 mod 1000000.
2. 由于只求最后6位数,如果阶乘中有一个数n后6位为0,那么从n开始,后面的数对最终答案都不影响了,因为 (n+1)!最后6位也一定为0…,所以可以避免求所有数的阶乘。
#include <iostream>
#include <cstring>
#include <cstdio>
#define MOD 1000000
using namespace std;
int main()
{
int n;
while(cin>>n){
int result = 0;
for(int i=1; i<=n; i++){
int temp = 1;
for(int j=1; j<=i; j++){
temp = temp*j % MOD;
}
result = (result+temp) % MOD;
}
cout<<result<<endl;
}
return 0;
}