大数卡特兰(模板)
发布时间:2020-12-14 02:58:30 所属栏目:大数据 来源:网络整理
导读:#include iostream#include cstdio#include cstringusing namespace std;int a[110][110]; //大数卡特兰数int b[110]; //卡特兰数的长度 void Catalan(){ //求卡特兰数 int i,j,len,carry,tmp; a[1][0]=b[1]=1; len=1; for(i=2;i=100;i++) { for(j=0;jlen;j+
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int a[110][110]; //大数卡特兰数 int b[110]; //卡特兰数的长度 void Catalan() { //求卡特兰数 int i,j,len,carry,tmp; a[1][0]=b[1]=1; len=1; for(i=2;i<=100;i++) { for(j=0;j<len;j++) //乘法 a[i][j]=a[i-1][j]*(4*i-2); carry=0; for(j=0;j<len;j++) { //处理相乘结果 tmp=carry+a[i][j]; a[i][j]=tmp%10; carry=tmp/10; } while(carry) { //进位处理 a[i][len++]=carry%10; carry/=10; } //carry=0; for(j=len-1;j>=0;j--) { //除法 tmp=carry*10+a[i][j]; a[i][j]=tmp/(i+1); carry=tmp%(i+1); } while(!a[i][len-1]) //高位零处理 len--; b[i]=len; } } int main() { int n; Catalan(); while(~scanf("%d",&n)) { for(int i=b[n]-1;i>=0;i--) printf("%d",a[n][i]); printf("n"); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |