(组合数学3.3.2.2)UVA 10497 - Sweet Child Makes Trouble(特殊的排列有关问题——错排方案数)

(组合数学3.3.2.2)UVA 10497 - Sweet Child Makes Trouble(特殊的排列问题——错排方案数)
package com.njupt.acm;

import java.math.BigInteger;
import java.util.Scanner;

public class UVA_10497 {

	public static void main(String[] args) {
		BigInteger d[] = new BigInteger[805];
		
		d[1] = new BigInteger("0");
		d[2] = new BigInteger("1");
		
		int i;
		for(i = 3 ; i <= 801 ; ++i){
			d[i] = new BigInteger((i - 1) + "").multiply(d[i-2].add(d[i-1]));
		}
		
		Scanner scanner = new Scanner(System.in);
		int n ;
		
		while(true){
			n =  scanner.nextInt();
			if(n < 0){
				break;
			}
			System.out.println(d[n]);
			
		}
		
	}
}