求解Catalan数,(大数相乘,大数相除,大数相加)
Catalan数
卡塔兰数是组合数学中一个常在各种计数问题中出现的数列。以比利时的数学家欧仁·查理·卡塔兰(1814–1894)命名。历史上,清代数学家明安图(1692年-1763年)在其《割圜密率捷法》最早用到“卡塔兰数”,远远早于卡塔兰。有中国学者建议将此数命名为“明安图数”或“明安图-卡塔兰数”。卡塔兰数的一般公式为 C(2n,n)/(n+1)。
//大数相加
string add(string s1,string s2)
{
if(s1.length()<s2.length())
{
string temp=s1;
s1=s2;
s2=temp;
}
int i,j;
for(i=s1.length()-,j=s2.length()-; i>=; i--,j--)
{
s1[i]=char(s1[i]+(j>=?s2[j]-'':));
if(s1[i]-''>=)
{
s1[i]=char((s1[i]-'')%+'');
if(i) s1[i-]++;
else s1=''+s1;
}
}
return s1;
}
大数相乘
//大数相乘
string mult(string a,string b)
{
int flag=,i,j,k,p,q,t,max;
char ch;
string c,ans;
p=a.size()-;
q=b.size()-;
ans="";
for(i=p; i>=; i--)
{
flag=;
c="";
for(j=i; j<p; j++) c+='';
for(j=q; j>=; j--)
{
t=(b[j]-'')*(a[i]-'')+flag;
flag=t/;
c+=(t%+'');
}
if(flag) c+=(flag+'');
for(j=,k=c.size()-; j<k; j++,k--)
{
ch=c[j];
c[j]=c[k];
c[k]=ch;
}
ans=add(ans,c);
}
return ans;
}
大数除以小数
//大数除以小数
string div(string src,int n)
{
string dest="";
int len = src.length(),i,k,t = , s = ;
bool flag = true;
for(i=,k=; i<len; i++)
{
t = s*+(src[i]-);
if(t/n> || t==)
dest += (t/n+),s = t%n,flag = false;
else
{
s = t;
if(!flag)
dest += '';
}
}
return dest;
}
求解Catalan数
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
#include<string.h>
#include<stack>
#include<set>
#include <queue>
using namespace std;
string s[]; //大数相加
string add(string s1,string s2)
{
if(s1.length()<s2.length())
{
string temp=s1;
s1=s2;
s2=temp;
}
int i,j;
for(i=s1.length()-,j=s2.length()-; i>=; i--,j--)
{
s1[i]=char(s1[i]+(j>=?s2[j]-'':));
if(s1[i]-''>=)
{
s1[i]=char((s1[i]-'')%+'');
if(i) s1[i-]++;
else s1=''+s1;
}
}
return s1;
} //大数相乘
string mult(string a,string b)
{
int flag=,i,j,k,p,q,t,max;
char ch;
string c,ans;
p=a.size()-;
q=b.size()-;
ans="";
for(i=p; i>=; i--)
{
flag=;
c="";
for(j=i; j<p; j++) c+='';
for(j=q; j>=; j--)
{
t=(b[j]-'')*(a[i]-'')+flag;
flag=t/;
c+=(t%+'');
}
if(flag) c+=(flag+'');
for(j=,k=c.size()-; j<k; j++,k--)
{
ch=c[j];
c[j]=c[k];
c[k]=ch;
}
ans=add(ans,c);
}
return ans;
} //大数除以小数
string div(string src,int n)
{
string dest="";
int len = src.length(),i,k,t = , s = ;
bool flag = true;
for(i=,k=; i<len; i++)
{
t = s*+(src[i]-);
if(t/n> || t==)
dest += (t/n+),s = t%n,flag = false;
else
{
s = t;
if(!flag)
dest += '';
}
}
return dest;
}
int main()
{
s[]="";
for(int i=; i<; i++)
{
char s1[];
sprintf(s1,"%d",*i-);
s[i] = mult(s[i-],s1);
s[i] = div(s[i],i+);
}
int n;
while(scanf("%d",&n))
{
if(n==-) break;
cout<<s[n]<<endl;
}
return ;
}
求解Catalan数,(大数相乘,大数相除,大数相加)的更多相关文章
- 1051:A × B problem 大数相乘
给你两个整数,请你计算A × B. 输入 数据的第一行是整数T(1 ≤ T ≤ 20),代表测试数据的组数.接着有T组数据,每组数据只有一行,包括两个非负整数A和B.但A和B非常大,Redraimen ...
- 大数相乘----C语言
/* 大数相乘: 因为是大数,乘积肯定超出了能定义的范围,因此考虑用数组存储,定义三个数组,分别存储乘数,被乘数和积. 规则与平常手算一样,从个位开始分别与被乘数的每一位相乘,但是有一点不同的是:我们 ...
- 【集训笔记】【大数模板】特殊的数 【Catalan数】【HDOJ1133【HDOJ1134【HDOJ1130
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3324 http://blog.csdn.net/xymscau/artic ...
- (母函数 Catalan数 大数乘法 大数除法) Train Problem II hdu1023
Train Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Java 大数相乘、大数相加、大数相减
思路来源:: https://blog.csdn.net/lichong_87/article/details/6860329 /** * @date 2018/6/22 * @description ...
- HDU 1023 Train Problem II 大数打表Catalan数
一个出栈有多少种顺序的问题.一般都知道是Catalan数了. 问题是这个Catalan数非常大,故此须要使用高精度计算. 并且打表会速度快非常多.打表公式要熟记: Catalan数公式 Cn=C(2n ...
- Linux C/C++ 编程练手 --- 大数相加和大数相乘
最近写了一个大数相乘和相加的程序,结果看起来是对的.不过期间的效率可能不是最好的,有些地方也是临时为了解决问题而直接写出来的. 可以大概说一下相乘和相加的解决思路(当然,大数操作基本就是两个字符串的操 ...
- 大数相加和大数相乘以及打印从1到最大的n位数
string add(string a, string b){ int nlength; int diff; if (a.size() > b.size()){ nlength = a.size ...
- POJ 2389 Bull Math(水~Java -大数相乘)
题目链接:http://poj.org/problem?id=2389 题目大意: 大数相乘. 解题思路: java BigInteger类解决 o.0 AC Code: import java.ma ...
随机推荐
- Objective-C try/catch异常处理机制原理。
try-catch-finaly finally在任何情况下都会执行(不管有没有异常),属于整个体系的附属. 基本思想是跳到捕获锚点,重新执行. http://www.cnblogs.com/mark ...
- js常见问题总结归纳
一.使用 typeof bar === "object" 来确定 bar 是否是对象的潜在陷阱是什么?如何避免这个陷阱? 首先typeof bar === "object ...
- js call 函数
function bb(){ console.log(this.x) } function cc(){ this.x = 200 } var p = new cc(); bb.call(p) // ...
- MySql学习笔记04
复习 day01 数据库相关: create database db4 character set utf8; show databases; show create database db4; dr ...
- jupyter notebook(三)——IOPub_data_rate_limit报错
一.问题 运行jupyter notebook,然后运行python代码,读取文件处理时,会报错.发现时IO读取时错误.应该是IO速率问题. 下面是问题报错: IOPub data rate exce ...
- python3 提成计算
题目 企业发放的奖金根据利润提成. 利润(I)低于或等于10万元时,奖金可提10%: 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%: 20万到4 ...
- python3 练习题100例 (十二)
题目十二:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数",因为153 ...
- __setitem__,__getitem,__delitem__的作用
class Foo: def __init__(self, name): self.name = name def __getitem__(self, item): print('obj[key]时, ...
- 使用 CAST
使用 CAST: CAST ( expression AS data_type ) 使用 CONVERT: CONVERT (data_type[(length)], expression [, st ...
- 图论:HDU2544-最短路(最全、最经典的最短路入门及小结)
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...