#include <iostream>
#include <vector>
using namespace std;
bool flag = true;
vector<int> sum;
// 大数阶乘
vector<int> BigFactorial(int m)
{
int a[50000]={0,1};
int i,j,carry,tmp,length=1;
vector<int> num;
for(i=2;i<=m;i++)
{
carry=0;
for(j=1;j<=length;j++)
{
tmp=a[j]*i+carry;
a[j]=tmp%10;
carry=tmp/10;
if(j==length&&carry!=0)
length++;
}
}
for(int k=length;k>=1;k--)
{
num.insert(num.begin(), a[k]);
printf("%d",a[k]);
}
printf("\t");
for (std::vector<int>::iterator it = num.begin(); it < num.end(); it++)
cout << *it;
cout << endl;
cout << endl;
return num;
}
int main(int argc, char* argv[])
{
vector<int> mid;
int n;
int carry = 0;
cin >> n;
// 阶乘求和
while (n){
mid = BigFactorial(n);
if (flag)
{
sum = mid;
for (std::vector<int>::iterator it = mid.begin(); it < mid.end(); it++)
*it = 0;
flag = false;
}
for (int i = 0; i < mid.size(); i++)
{
int i_tem = sum[i] + mid[i];
sum[i] = i_tem % 10;
carry = (i_tem / 10 == 1) ? 1 : 0;
if (carry)
sum[i+1] += carry;
}
n--;
}
cout << endl;
for (std::vector<int>::reverse_iterator it = sum.rbegin(); it < sum.rend(); it++)
cout << *it;
cout << endl;
system("pause");
return 0;
}