杭电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;
}

posted @ 2010-04-25 20:43  北海小龙  阅读(194)  评论(0编辑  收藏  举报