#include <stdio.h> #include <string.h> #include <iostream> using namespace std; int n; #define BASE 10000 #define UNIT 4 #define FORMAT "%04d" class BigNum{ public: int a[20]; int length; BigNum(const int k){ //用小于BASE的k初始化大数 memset(a, 0, sizeof(a)); a[0] = k; length = 1; } BigNum(){ memset(a, 0, sizeof(a)); length = 0; } BigNum operator * (const BigNum & B){ BigNum ans; int i,j,up=0,num; for(i=0; i<length; i++){ up = 0; //每次循环都要初始化为0 for(j=0; j<B.length; j++){ num = up + a[i] * B.a[j] + ans.a[i+j]; up = num / BASE; num = num % BASE; // cout << num << endl; ans.a[i+j] = num; } // cout << up << endl; if(up > 0) ans.a[i+j] = up; } ans.length = i+j; while(ans.a[ans.length -1] == 0 && ans.length > 1) ans.length--; return ans; } BigNum operator /(const int & k) const{ // k < BASE, 对此题适用 BigNum ans; int down=0,i,num; for(i=length-1; i>=0; i--){ num = ( (down * BASE) + a[i] ) / k; down = ( (down * BASE) + a[i] ) % k; ans.a[i] = num; } ans.length = length; while(ans.a[ans.length-1] == 0 && ans.length > 1) ans.length -- ; return ans; } void print(){ printf("%d", a[length-1]); for(int i=length-2; i>=0; i--) printf(FORMAT,a[i]); } }; //f(n) = C(2n,n)/(n+1) int main(){ BigNum nums[101]; nums[1] = BigNum(1); nums[2] = BigNum(2); nums[3] = BigNum(5); for(int i=4; i<=100; i++){ nums[i] = nums[i-1] * (4*i-2)/(i+1); } int n; while(scanf("%d", &n), n>0){ nums[n].print(); printf("\n"); } return 0; }