import java.util.*; import java.math.*; public class Main { public static void main(String []args) { Scanner cin=new Scanner(System.in); int i,n; while(cin.hasNext()) { n=cin.nextInt(); BigInteger s1 = BigInteger.valueOf(1); BigInteger s2 = BigInteger.valueOf(1); BigInteger s3 = BigInteger.valueOf(1); for(i=1;i<=n;i++) s1 = s1.multiply(BigInteger.valueOf(i)); for(i=n+2;i<=2*n;i++) s2 = s2.multiply(BigInteger.valueOf(i)); s3 = s2.divide(s1); System.out.println(s3); } } }
这个题目求的是n个数字出栈的所有可能序列,利用公式count=C(2*n,n)-C(2*n,n-1);
进行进一步的化简得到count=(n+2)*(n+3)*……*(2*n)/(1*2*3……*n);
然后进行大数的操作,由于C语言实现比较麻烦,所以选用了Java的大数处理,果断AC了!