题目描述
楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
输入输出格式
输入格式:
一个数字,楼梯数。
输出格式:
走的方式几种。
输入输出样例
输入样例#1:
4
输出样例#1:
5
思路:斐波那契数列+高精度的结合
源代码
#include<iostream>
#include<cstring>
using namespace std;
int a[5000],b[5000],c[5000];
int main()
{
int n;
int x=1;
int i,j;
cin>>n;//输入
if(n<3)
{
cout<<n;
return 0;
}
/*初始化*/
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
a[1]=1;b[1]=2;
for(i=3;i<=n;i++)
{
for(j=1;j<=x;j++)
c[j]=a[j]+b[j];//相加
for(j=1;j<=x;j++)//进位
{
if(c[j]>9)
{
c[j+1]=c[j+1]+c[j]/10;
c[j]%=10;
if(j+1>x)
x++;
}
}
/*交换*/
for(j=1;j<=x;j++)
a[j]=b[j];
for(j=1;j<=x;j++)
b[j]=c[j];
}
for(i=x;i>0;i--)//倒序输出
cout<<b[i];
return 0;
}