import java.io.*;
import java.util.*;
import java.math.*;
public class Main
{
public static BigInteger jiecheng(int n)
{
BigInteger res=BigInteger.ONE;
if (n==0) return BigInteger.ONE;
for (int i=1;i<=n;i++)
res=res.multiply(new BigInteger(i+"0"));
return res;
}
public static BigInteger comb(int a,int b) // a up b down
{
BigInteger res=BigInteger.ONE;
return res.multiply(jiecheng(b)).divide(jiecheng(a).multiply(jiecheng(b-a)));
}
public static void main(String[] args)
{
int n;
Scanner in=new Scanner (System.in);
while (in.hasNext())
{
n=in.nextInt();
BigInteger ans=BigInteger.ONE;
ans=comb(n,2*n).add(comb(n-1,2*n).negate());
System.out.println(ans);/**/
}
}
}
这道题目 很裸的卡特兰数列啦。
把题目翻译一下就是 输进去一个n 问第n个卡特兰数是多少。
第100个卡特兰数会很大,所以要么采用大数类,要么自己手模大树乘除。 我选择前者。
代码: