hdu 1023 Train Problem II 高精训练
Train Problem II
1 2 5 16796
The result will be very large, so you may not process it by 32-bit integers.
练习高精度的不错选择!
Catalan数的组合公式为 Cn=C(2n,n) / (n+1);
递推公式为 h(n ) = h(n-1)*(4*n-2) / (n+1)
#include<iostream> using namespace std; int a[101][101]={0}; int main() { int n,i,j,len,r,temp,t; int b[101]; a[1][0] = 1; len = 1; b[1] = 1; for(i=2;i<=100;i++) { t = i-1; for(j=0;j<len;j++) //乘法 a[i][j] = a[i-1][j]*(4*t+2); for(r=j=0;j<len;j++) //处理相乘结果 { temp = a[i][j] + r; a[i][j] = temp % 10; r = temp / 10; } while(r) //进位处理 { a[i][len++] = r % 10; r /= 10; } for(j=len-1,r=0;j>=0;j--) //除法 { temp = r*10 + a[i][j]; a[i][j] = temp/(t+2); r = temp%(t+2); } while(!a[i][len-1]) //高位零处理 len --; b[i] = len; } while(cin>>n) { for(j=b[n]-1;j>=0;j--) printf("%d",a[n][j]); printf("/n"); } return 0; }