链接:
题意:裸卡特兰数,但是必须用大数做
balabala:上交高精度模板题,增加一下熟悉度
/************************************************************************* > File Name: hdu1023.cpp > Author: WArobot > Blog: http://www.cnblogs.com/WArobot/ > Created Time: 2017年05月11日 星期四 19时25分09秒 ************************************************************************/#includeusing namespace std;const int maxlen = 10000;class HP{ public: int len , s[maxlen]; HP(){ (*this) = 0; }; HP(int inte){ (*this) = inte; }; HP(const char *str){ (*this)=str; }; friend ostream & operator<<(ostream &cout,const HP &x); HP operator = (int inte); HP operator = (const char*str); HP operator * (const HP &b); HP operator - (const HP &b); HP operator / (const HP &b); int Compare (const HP &b); HP operator + (const HP &b);};ostream& operator <<(ostream & cout,const HP &x){ for(int i=x.len ; i>=1 ; i--) cout< 0;){ s[++len]=inte%10; inte/=10; }; return (*this);}HP HP::operator * (const HP &b){ int i,j; HP c; c.len = len + b.len; for(i=1;i<=c.len;i++) c.s[i] = 0; for(i=1;i<=len;i++) for(j=1;j<=b.len;j++) c.s[i+j-1] += s[i]*b.s[j]; for(i=1;i 1 && !c.s[i]) i--; c.len = i; return c;}HP HP::operator - (const HP &b){ int i,j; HP c; for(i=1,j=0;i<=len;i++){ c.s[i] = s[i] - j; if(i<=b.len) c.s[i] -= b.s[i]; if(c.s[i]<0){ j=1; c.s[i]+=10; } else j = 0; } c.len = len; while(c.len>1 && !c.s[c.len]) c.len--; return c;}int HP::Compare(const HP &y){ if(len>y.len) return 1; if(len 1)&&( s[i]==y.s[i] ) ) i--; return s[i]-y.s[i];}HP HP::operator / (const HP &b){ int i,j; HP d(0),c; for(i=len;i>0;i--){ if( !(d.len==1 && d.s[1]==0) ) { for( j = d.len; j>0;j--) d.s[j+1] = d.s[j]; ++d.len; } d.s[1] = s[i]; c.s[i] = 0; while( (j=d.Compare(b))>=0 ) { d = d-b; c.s[i]++; if(j==0) break; } } c.len = len; while( (c.len>1)&&(c.s[c.len]==0) ) c.len--; return c;}HP HP::operator + (const HP &b){ int i; HP c; c.s[1] = 0; for(i = 1; i<=len || i<=b.len || c.s[i]; i++ ){ if( i<=len ) c.s[i] += s[i]; if( i<=b.len ) c.s[i] += b.s[i]; c.s[i+1] = c.s[i]/10; c.s[i] %= 10; } c.len = i-1; if( c.len == 0 ) c.len = 1; return c;}int main(){ HP h[102]; h[0] = h[1] = 1; for(int i=2;i<=100;i++){ for(int j=0;j