20分的,求助求助。
  • 板块P1255 数楼梯
  • 楼主456laji
  • 当前回复11
  • 已保存回复11
  • 发布时间2020/5/16 19:47
  • 上次更新2023/11/7 02:20:01
查看原帖
20分的,求助求助。
312780
456laji楼主2020/5/16 19:47

代码丑陋,见谅。

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int N=1e5+10;
ull num[N];
 
int solv(int w,int *a,int lena,int *b,int lenb,int k)
{
	
	if(w==k) 
	{
		for(int i=lenb;i>=0;i--)
			printf("%d",b[i]);
		return 0;
	}
	int lenc=0,up=0;
	int c[N]={0};
	while(lenc<=lena||lenc<=lenb)
	{
		c[lenc]=a[lenc]+b[lenc]+up;
		up=c[lenc]/10;
		c[lenc]%=10;
		lenc++;
	}
	c[lenc]=up;
	
	if(c[lenc]==0) lenc--;

	solv(w+1,b,lenb,c,lenc,k);
}

int main()
{
	int n;
	cin>>n;
	num[0]=0,num[1]=1,num[2]=2;
	if(n<=2)
		printf("%llu\n",num[n]);
	else if(n<100)
	{
		for(int i=3;i<=n;i++)
			num[i]=num[i-1]+num[i-2];
		printf("%llu\n",num[n]);
	}
	else {
		int a[N]={0},b[N]={0};
		a[0]=1,b[0]=2;
		solv(3,a,0,b,0,n);
		
	}
	return 0;
}
2020/5/16 19:47
加载中...