#include<iostream>
#include<string.h>
#define MAX 5000
using namespace std;
void Print(int n[])//印出
{
int i;
for (i=MAX-1; i>0; i--)
if(n[i]!=0) break;
for ( ; i>=0; i--)
cout << n[i];
cout << endl;
}
void add(int a[MAX], int b[MAX], int c[MAX])//加法
{
for (int i=0; i<MAX; i++) // 對應的位數相加
c[i] = a[i] + b[i];
for (int i=0; i<MAX-1; i++) // 一口氣進位
{
c[i+1] += c[i] / 10; // 進位
c[i] %= 10; // 進位後餘下的數
}
}
void mul(int a[MAX], int b, int c[MAX])//大數乘int
{
for (int i=0; i<MAX; i++)
c[i] = a[i] * b;
for (int i=0; i<MAX-1; i++) // 一口氣進位
{
c[i+1] += c[i] / 10;
c[i] %= 10;
}
}
void Zero(int n[])//歸零
{
int i;
for (i=0; i<MAX; i++)
n[i]=0;
}
int main()
{
int a[MAX],b,c,d[MAX];
Zero(d);
for(b=1;b<=1000;b++)
{
Zero(a);
a[0]=1;
for(c=1;c<=b;c++)
{
mul(a,c,a);
}
add(a,d,d);
}
Print(d);
}