递推,long long 型刚好够用
这里我只写出公式:输入为n,不同的情况应为:1!*C(0,N)-2!*C(1,N-1)+3!*C(2,N-2)……一直到n。
公式可化简为:对N!/I!求和(I=I,2...N)。
#include<iostream>
using namespace std;
int main()
{
long long aaa[21],sum=1;
int i,j,n;
aaa[1]=aaa[0]=1;
for(i=1,sum=1;i<21;i++)
{
sum*=i;
aaa[i]=sum;
}
while(scanf("%d",&n)!=EOF)
{
sum=0;
for(i=0;i<=n;i++)
{
if((n-i)%2)
sum-=aaa[n]/aaa[n-i];
else
sum+=aaa[n]/aaa[n-i];
}
cout<<sum<<endl;
}
return 0;
}