1 2 3 10
1 2 5 16796HintThe result will be very large, so you may not process it by 32-bit integers.
#include <stdio.h>
int cat[110][100] ;
int main()
{
int n ;
cat[0][0] = cat[1][0] = 1 ;
cat[0][1] = cat[1][1] = 1 ;
for(int i = 2 ; i <= 100 ; ++i)
{
for(int j = 1 ; j <= cat[i-1][0] ; ++j)
{
cat[i][j] = cat[i-1][j]*(4*i-2) ;
}
int temp = 0 , len = 1;
for(len = 1 ; len <= cat[i-1][0] ; ++len)
{
cat[i][len] += temp ;
temp = cat[i][len]/10 ;
cat[i][len] %= 10 ;
}
while(temp != 0)
{
cat[i][len++] += temp%10 ;
temp /= 10 ;
}
for(int j = len-1 , r = 0; j > 0 ; --j)
{
temp = r*10+cat[i][j] ;
r = temp%(i+1) ;
cat[i][j] = temp/(i+1) ;
}
while(cat[i][len] == 0)
{
--len ;
}
cat[i][0] = len ;
}
while(~scanf("%d",&n))
{
for(int i = cat[n][0] ; i > 0 ; --i)
printf("%d",cat[n][i]) ;
puts("") ;
}
return 0 ;
}hdu 1023 Train Problem II 这题运用到大数相乘+大数相除+卡特兰数
原文地址:http://blog.csdn.net/lionel_d/article/details/44857001