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