hdu1023卡特的问题

请教一个hdu1023卡特的问题。求解答hdu1023

  1. import java.math.BigInteger;

  2. import java.util.Scanner;

  3. public class Main

  4. {

  5. static BigInteger fac(BigInteger n)

  6. {

  7. BigInteger result=BigInteger.ONE;

  8. for(BigInteger i=BigInteger.ONE;!i.equals(n.add(BigInteger.ONE));i=i.add(BigInteger.ONE))

  9. {

  10. result=result.multiply(i);

  11. }

  12. return result;

  13. }

  14. public static void main(String args[])

  15. {

  16. Scanner cin=new Scanner(System.in);

  17. while(cin.hasNext())

  18. {

  19. BigInteger n=cin.nextBigInteger();

  20. BigInteger total=fac(n.add(n)).divide(n.add(BigInteger.ONE).multiply(fac(n).pow(2)));

  21. System.out.println(total.toString());

  22. }

  23. }

  24. }

hdu 1023 卡特兰数经典

#include <iostream>

using namespace std;
int a[105][105];
int b[105];
void catalan() //求卡特兰数
{
int i, j, len, carry, temp;
a[1][0] = b[1] = 1;
len = 1;
for(i = 2; i <= 100; i++)
{
for(j = 0; j < len; j++) //乘法
a[i][j] = a[i-1][j]*(4*(i-1)+2);
carry = 0;
for(j = 0; j < len; j++) //处理相乘结果
{
temp = a[i][j] + carry;
a[i][j] = temp % 10;
carry = temp / 10;
}
while(carry) //进位处理
{
a[i][len++] = carry % 10;
carry /= 10;
}
carry = 0;
for(j = len-1; j >= 0; j--) //除法
{
temp = carry*10 + a[i][j];
a[i][j] = temp/(i+1);
carry = temp%(i+1);
}
while(!a[i][len-1]) //高位零处理
len --;
b[i] = len;
}
}
int main(int argc, char *argv[])
{
int n,i;
catalan();
int j;
while (cin >> n)
{
for(j = b[n] - 1; j >= 0; j--)
{
printf("%d",a[n][j]);
}
printf("\n");
}
return 0;
}

更多关注微信:xllx999

CopyRight 2002-2017 闻蜂网