卡特兰大数
来源:互联网 发布:mac页面切换快捷键 编辑:程序博客网 时间:2024/04/28 19:49
卡特兰大数有两种递推公式:
1、h[i]=h[i-1]*(4*i-2)/(i+1);2、h[i]=h[0]*h[i-1]+h[1]*h[i-2]+...+h[i-1]*h[0](下标和恒等于i-1);
C++的写法
#include<iostream>#include<cstring>#include<cstdio>#include<string>#define base 10000#define max 120using namespace std;int catalan[max][max];void big_mul(int *a,int n) //大数乘法{ int temp=0; for(int i=0; i<max; i++) { temp+=a[i]*n;; a[i]=temp%base; temp/=base; }}void big_div(int *a,int n) //大数除法{ int temp=0; for(int i=max-1; i>=0; i--) { temp=temp*base+a[i]; a[i]=temp/n; temp%=n; }}void set() //求卡特兰数{ for(int i=0; i<max; i++) memset(catalan[i],0,sizeof(int)*max); catalan[0][0]=1; catalan[1][0]=1; for(int i=2; i<max; i++) { memcpy(catalan[i],catalan[i-1],sizeof(int)*max); big_mul(catalan[i],4*i-2); big_div(catalan[i],i+1); }}void output(int* a,int n) //输出{ int i=n-1; while(a[i]==0) i--; printf("%d",a[i--]); while(i>=0) printf("%04d",a[i--]); printf("\n");}int main(){ set(); int n; while(~scanf("%d",&n)) output(catalan[n],n); return 0;}
JAVA的写法
import java.math.BigInteger;import java.util.Scanner;public class Main { public static BigInteger c[] = new BigInteger[101]; public static void main(String[] args) { Scanner scan = new Scanner(System.in); c[0] = BigInteger.ONE; for (int i = 1; i <= 100; i++) { BigInteger a = BigInteger.valueOf(4 * i - 2); BigInteger b = BigInteger.valueOf(i + 1); c[i] = a.multiply(c[i - 1]).divide(b); } while (scan.hasNext()) { int n = scan.nextInt(); System.out.println(c[n]); } }}
0 0
- 卡特兰数 大数
- 总结--卡特兰大数
- 大数卡特兰数
- 大数卡特兰数
- 大数 卡特兰数
- 卡特兰大数
- 大数卡特兰数
- catalan 卡特兰 卡塔兰 大数
- hdu1133 大数+卡特兰数
- 大数模板+卡特兰数
- 大数卡特兰(模板)
- HDU 1023 大数卡特兰
- 卡特兰数 大数模板
- 卡特兰数+大数处理
- 卡特兰数(catalan数)总结 (卡特兰大数、卡特兰大数取模、卡特兰数应用)
- hdu 1134 卡特兰数+大数
- [转]C++大数模板 卡特兰数
- HDU 1130(卡特兰数,大数)
- Markdown 编辑器语法指南
- halcon模板匹配学习(二) 准备模板
- Linux中的Shell类型检测
- 滤波算法
- Redis集群搭建
- 卡特兰大数
- Windows平台下批处理脚本修改IP地址
- SDWebImage源代码阅读(二)
- pat 1045. 快速排序
- linux系统打开SqlDeveloper出错
- Mysql 5.7 压缩包安装
- Android入门
- HDU 1556 Color the ball
- LeetCode: Length of Last Word