UVa:10303 How Many Trees ?
来源:互联网 发布:c语言的strtok 编辑:程序博客网 时间:2024/06/14 18:00
卡特兰数。
递推公式:h(n)=h(n-1)*(4*n-2)/(n+1)
用到了大数乘法和大数除法。
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#define MAXN 700using namespace std;void Mult(char *a,int b,char* back){ int c[MAXN]= {0}; int L=strlen(a); for(int i=L-1,j=0; i>=0; --i,++j) c[j]=(a[i]-'0')*b; for(int i=0; i<=L+10; ++i) { c[i+1]+=c[i]/10; c[i]=c[i]%10; } bool zero=false; int p=0; for(int i=L+10; i>=0; --i) { if(c[i]) zero=true; if(zero) back[p++]=c[i]+'0'; } if(!zero) back[p++]='0'; back[p]=0;}void Divi(char *a,int b,char *back){ int rem=0,num=0,p=0; int L=strlen(a); for(int i=0; i<L; ++i) { num=rem*10+a[i]-'0'; back[p++]=num/b+'0'; rem=num%b; } back[p]=0; int q=0; for(int i=0; i<p; ++i) if(back[i]!='0') { q=i; break; } strcpy(back,back+q);}char num[1005][MAXN];int main(){ strcpy(num[1],"1"); for(int i=2;i<=1000;++i) { char temp[MAXN],b[MAXN]; Mult(num[i-1],4*i-2,temp); Divi(temp,i+1,num[i]); } int n; while(scanf("%d",&n)!=EOF) printf("%s\n",num[n]); return 0;}
0 0
- Uva 10303 How Many Trees?
- UVA 10303 How Many Trees?
- UVA 10303 How Many Trees?
- UVa:10303 How Many Trees ?
- uva 10303 How Many Trees?
- UVa 10303 How Many Trees? (卡特兰数&高精度)
- uva 10303 - How Many Trees?(卡特兰数)
- UVA 10303 - How Many Trees?(数论 卡特兰数 高精度)
- UVa10303 - How Many Trees?
- Codeforces_9D-How many trees?
- How Many Trees?
- hdu1130-How Many Trees?
- How Many Trees?
- How Many Trees?
- How Many Trees?
- HDU How Many Trees?
- hdu 1130 How Many Trees?
- HDU 1130 How Many Trees?
- 重回ubutntu12.04小记(装完ubuntu做的几件事)
- javascript 数值与字符传相互转换
- sizeof
- Centos yum 错误
- Win7中解决无法卸载/升级 VS2008、无法输入序列号的问题
- UVa:10303 How Many Trees ?
- C# Enum,Int,String之间的互相转换
- 黑马程序员—对话框Dialog小例子
- 简单的实例来理解WCF 数据服务(WCF DS)
- 单链表的插入与删除
- 使用 Spring 2.5 TestContext 测试框架
- 项目视频讲解_360问答系统
- 黑马程序员—GUI(菜单)小例子
- 13.java MessageFormat 类