题目描述
楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
输入格式
一个数字,楼梯数。
输出格式
走的方式几种。
输入输出样例
输入 #1
4
输出 #1
5
说明/提示
60% N<=50
100% N<=5000
f数组是高精,其实就是斐波拉契数列加一个高精
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
string f(string a,string b)
{
int x[2005],y[2005];
int c[2005];
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
memset(c,0,sizeof(c));
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
for(int i=0;i<a.size();i++)
{
x[i]=a[i]-'0';
}
for(int i=0;i<b.size();i++)
{
y[i]=b[i]-'0';
}
for(int i=0;i<max(a.size(),b.size());i++)
{
c[i]+=x[i]+y[i];
c[i+1]+=c[i]/10;
c[i]%=10;
}
bool f=0;
string q="";
for(int i=max(a.size(),b.size());i>=0;i--)
{
if(c[i]!=0||i==0)
{
f=1;
}
if(f==1)
{
q+=c[i]%10+'0';
}
}
return q;
}
int main()
{
int n;
cin>>n;
if(n==0)
{
cout<<0;
return 0;
}
string mm="1";
string nn="1";
n--;
while(n--)
{
string qq=f(mm,nn);
mm=nn;
nn=qq;
}
cout<<nn<<endl;
}