AnthonyZHOU @ 2022-10-31 16:02:03
#include <iostream>
#define SIZE 64
using namespace std;
struct EntierLong
{
int chiffres[SIZE];
};
EntierLong addition(EntierLong n1,EntierLong n2)
{
EntierLong n;
for(int i=0;i<SIZE;i++)
{
n.chiffres[i]=0;
}
for(int i=0;i<SIZE;i++)
{
n.chiffres[i]+=(n1.chiffres[i]+n2.chiffres[i])%10;
n.chiffres[i+1]+=(n1.chiffres[i]+n2.chiffres[i])/10;
}
return n;
}
EntierLong multiplication(EntierLong n1,EntierLong n2)
{
EntierLong n;
for(int i=0;i<SIZE;i++)
{
n.chiffres[i]=0;
}
for(int i=0;i<SIZE;i++)
{
for(int j=0;j<SIZE;j++)
{
n.chiffres[i+j]+=(n1.chiffres[j]*n2.chiffres[i]);
}
}
for(int i=0;i<SIZE;i++)
{
n.chiffres[i+1]+=n.chiffres[i]/10;
n.chiffres[i]%=10;
}
return n;
}
EntierLong rEntierLong(long long int num)
{
EntierLong n;
for(int i=0;i<SIZE;i++)
{
n.chiffres[i]=0;
}
long long int k=num;
int i=0;
while(k!=0)
{
n.chiffres[i]=k%10;
k/=10;
i++;
}
return n;
}
EntierLong factoriel(int times)
{
EntierLong n;
for(int i=0;i<SIZE;i++)
{
n.chiffres[i]=0;
}
n.chiffres[0]=1;
for(int i=1;i<=times;i++)
{
EntierLong temps=rEntierLong(i);
n=multiplication(n,temps);
}
return n;
}
void presentation(EntierLong n)
{
int i=SIZE-1;
while((n.chiffres[i]==0)&&(i>0))
{
i-=1;
}
for(int j=i;j>=0;j--)
{
cout<<n.chiffres[j];
}
cout<<endl;
}
int main()
{
int times;
cin>>times;
EntierLong n;
for(int i=0;i<SIZE;i++)
{
n.chiffres[i]=0;
}
for(int i=1;i<=times;i++)
{
n=addition(n,factoriel(i));
}
presentation(n);
return 0;
}