杭电1465题
//错排问题
//思路:错排公式:d[n]= (n-1)*( d[n-1] + d[n-2])
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
//注意使用__int64,否则会溢出
__int64 a=0,b=1;
__int64 result;
if(n == 1)
{
cout<<0<<endl;
}
else if(n == 2)
cout<<1<<endl;
else
{
for(int i=3;i<n+1;i++)
{
result = (i-1)*(a+b);
a = b;
b = result;
}
//cout<<result<<endl;
printf("%I64d\n",result);
}
}
return 0;
}