卡特兰数,值得纪念下,包括了高精度乘法和除法。

本文介绍了一种使用卡特兰数解决杭电1023题的方法,并给出了详细的C++实现代码。此外,还介绍了如何通过高精度乘法解决大数运算的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先百度卡特兰数的公式吧:F(n)=F(n-1)*(4*n-2)/(n+1)  F(0)=1;

应用于杭电的1023题,火车出栈的几种方式...

#include <cstdio>
#include <algorithm>
#include <cstring>
const int l=110;
int f[200][200];
int ktl()
{
	f[0][0]=1;
	int n; 
	for (int i=1;i<=100;i++)
	{
		n=4*i-2;
		for (int j=0;j<=l;j++)
		{
			f[i][j]+=f[i-1][j]*n;
			if (f[i][j]>=10)
			{
				f[i][j+1]+=f[i][j]/10;
				f[i][j]=f[i][j]% 10;
			}
		}
		n=i+1;
		int ys=0;
		for (int j=l;j>=0;j--)
		{
			int p=(10*ys+f[i][j])/n;
			ys=(10*ys+f[i][j])%n;
			f[i][j]=p;
		}
	}
	return 0;
}
int main()
{
	memset(f,0,sizeof(f)); 
	ktl();
	int kk;
	while (~scanf("%d",&kk))
	{
		int j=l;
		while (f[kk][j]==0) j--;
		for (int k=j;k>=0;k--)
			printf("%d",f[kk][k]);
			printf("\n");
	}
	return 0;
}


 高精度乘法:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <sstream>
#include <algorithm>
using namespace std;
int a1[1001],a2[1001],s[1000010],l1,l2;
int l11,l22;
int chengfa()
{
	int pos,i,j;
	memset(s,0,sizeof(s));
	for (i=1;i<=l1;i++)
		for (j=1,pos=i;j<=l2;j++)
			s[pos++]+=a1[i]*a2[j];
	pos-=1;
	for (i=1;i<=pos;i++)
	if (s[i]>=10)
	{
		if (i==pos) pos++;
		s[i+1]+=s[i]/10;
		s[i]%=10;
	}
	return pos;
}
int main()
{
	char s1[1000],s2[1000];
	string ss;
	while (getline(cin,ss) && ss.length()>0)
	{
		istringstream is(ss);
		is>>s1>>s2;
		l1=strlen(s1);
		l2=strlen(s2);
		if (l1==1 && s1[0]=='0' || l2==1 && s2[0]=='0')
		{
			printf("0\n");
			continue;
		}
		l11=0,l22=0;
		if (s1[0]=='-') l11=1;
		if (s2[0]=='-') l22=1;
		for (int i=l1-1,l=1;i>=l11;i--,l++)
			a1[l]=s1[i]-'0';
		for (int i=l2-1,l=1;i>=l22;i--,l++)
			a2[l]=s2[i]-'0';
		int l=chengfa();
		if (l11!=l22) cout<<'-';
		while (s[l]==0) l--;
		for (int i=l;i>0;i--)
			printf("%d",s[i]);
		printf("\n");
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值