输入n,计算S=1!+2!+3!+…+n!的末6位(不含前导0)。n≤106, n!表示前n个正整数之积。
【数据范围】
对于所有数据,1≤n≤999999
c++程序
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100010;
int a[N],sum[N];
//该函数使数组进位
void carry (int s[])
{
for (int i = 0; i < N; i++ )
{
if(s[i] >= 10)
{
s[i+1] += s[i]/10;
s[i] %=10;
}
}
}
int main()
{
int n;
cin >> n;
a[0] = 1;
sum[0] =1;
for (int i = 2; i <= n; i++ )
{
for (int j = 0; j < N; j++ )
{
a[j] *= i;
sum[j] += a[j];
}
carry(a);
carry(sum);
}
//从后往前输出
bool flag = true;
for(int i=N;i>=0;i--)
{
if(flag && !a[i]) continue;
else
{
flag = false;
cout << sum[i];
}
}
puts("");
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int n,sum=0;
cin>>n;
for(int i=1;i<=n;i++)
{
sum=sum+i;
if(sum>=1000000)
sum=sum%1000000; //要是sun大于六位数,就取余1000000
}
cout<<sum<<endl;
return 0;
}