斐波那契数列 catalan
2016-01-28 14:59
281 查看
斐波那契数列 通式:
catalan:
#include<iostream>//c++
#include<cmath>//数学公式
#include<cstdlib>//malloc
#include<cstring>
#include<string>
#include<cstdio>//输入输出
#include<algorithm>//快排
#include<queue>//队列
#include<functional>//优先队列
#include<stack>//栈
#include<vector>//容器
#include<map>//地图 if continue
const int N=5555;
using namespace std;
//int w[100];
//string s;
//queue<int> q;
//priority_queue<int> q;//大到小
//priority_queue<int, vector<int>,greater<int> >q;//小到大
int a[N+10][N+10],b[N+10];
void catalan() //求卡特兰数
{
int i, j, len, carry, temp;
a[1][0] = b[1] = 1;
len = 1;
for(i = 2; i <N; i++)
{
for(j = 0; j < len; j++) //乘法
a[i][j] = a[i-1][j]*(4*(i-1)+2);
carry = 0;
for(j = 0; j < len; j++) //处理相乘结果
{
temp = a[i][j] + carry;
a[i][j] = temp % 10;
carry = temp / 10;
}
while(carry) //进位处理
{
a[i][len++] = carry % 10;
carry /= 10;
}
carry = 0;
for(j = len-1; j >= 0; j--) //除法
{
temp = carry*10 + a[i][j];
a[i][j] = temp/(i+1);
carry = temp%(i+1);
}
while(!a[i][len-1]) //高位零处理
len --;
b[i] = len;
}
}
int main()
{
int i,j,k,c;
int text,n,m;
//freopen("C:\\Users\\lenovo\\Desktop\\1.txt","r",stdin);
//freopen("C:\\Users\\lenovo\\Desktop\\2.txt","w",stdout);
//for(i=2;i<10;i++) cout<<b[i]<<"-- "<<i<<endl;
catalan();
while(cin>>n)
{
for(i=b
-1;i>=0;i--) cout<<a
[i];
cout<<endl;
}
return 0;
}
catalan:
#include<iostream>//c++
#include<cmath>//数学公式
#include<cstdlib>//malloc
#include<cstring>
#include<string>
#include<cstdio>//输入输出
#include<algorithm>//快排
#include<queue>//队列
#include<functional>//优先队列
#include<stack>//栈
#include<vector>//容器
#include<map>//地图 if continue
const int N=5555;
using namespace std;
//int w[100];
//string s;
//queue<int> q;
//priority_queue<int> q;//大到小
//priority_queue<int, vector<int>,greater<int> >q;//小到大
int a[N+10][N+10],b[N+10];
void catalan() //求卡特兰数
{
int i, j, len, carry, temp;
a[1][0] = b[1] = 1;
len = 1;
for(i = 2; i <N; i++)
{
for(j = 0; j < len; j++) //乘法
a[i][j] = a[i-1][j]*(4*(i-1)+2);
carry = 0;
for(j = 0; j < len; j++) //处理相乘结果
{
temp = a[i][j] + carry;
a[i][j] = temp % 10;
carry = temp / 10;
}
while(carry) //进位处理
{
a[i][len++] = carry % 10;
carry /= 10;
}
carry = 0;
for(j = len-1; j >= 0; j--) //除法
{
temp = carry*10 + a[i][j];
a[i][j] = temp/(i+1);
carry = temp%(i+1);
}
while(!a[i][len-1]) //高位零处理
len --;
b[i] = len;
}
}
int main()
{
int i,j,k,c;
int text,n,m;
//freopen("C:\\Users\\lenovo\\Desktop\\1.txt","r",stdin);
//freopen("C:\\Users\\lenovo\\Desktop\\2.txt","w",stdout);
//for(i=2;i<10;i++) cout<<b[i]<<"-- "<<i<<endl;
catalan();
while(cin>>n)
{
for(i=b
-1;i>=0;i--) cout<<a
[i];
cout<<endl;
}
return 0;
}
相关文章推荐
- 简单的四则运算
- 数的奇偶性
- ACM网址
- 1272 小希的迷宫
- 1272 小希的迷宫
- hdu 1250 大数相加并用数组储存
- 矩阵的乘法操作
- 蚂蚁爬行问题
- 蚂蚁爬行问题
- 求两个数的最大公约数【ACM基础题】
- 打印出二进制中所有1的位置
- 杭电题目---一只小蜜蜂
- HDOJ 1002 A + B Problem II (Big Numbers Addition)
- 初学ACM - 半数集(Half Set)问题 NOJ 1010 / FOJ 1207
- 初学ACM - 组合数学基础题目PKU 1833
- POJ ACM 1002
- POJ 2635 The Embarrassed Cryptographe
- POJ 3292 Semi-prime H-numbers
- POJ 2773 HAPPY 2006
- POJ 3090 Visible Lattice Points