题目描述
楼梯有 N 阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
输入格式
一个数字,楼梯数。
输出格式
输出走的方式总数。
输入输出样例
输入 #1复制
4
输出 #1复制
5
说明/提示
- 对于 60%60% 的数据,N≤50;
- 对于 100%100% 的数据,1≤N≤5000。
思路:
题意是很熟悉的,但有一个坑在里面,n非常大,用longlong也会爆,所以采用高精度算法,
记录一个数每一位进位。
代码:
#include <iostream>
using namespace std;
int n,x=1;
int a[5005][5005];//a[]为爬阶梯的方法,a[][]表示为爬阶梯的方法的每一位
void add(int k){
for(int i=1;i<=x;i++){
a[k][i]=a[k-1][i]+a[k-2][i];//公式
}
for(int i=1;i<=x;i++){
if(a[k][i]>9){//个位进十位,十位进百位
a[k][i+1]+=a[k][i]/10;//进位
a[k][i]%=10;//当前位
if(a[k][x+1])x++;//如果最后一位大于9,则总位数++
}
}
}
int main()
{
cin>>n;
a[1][1]=1;a[2][1]=2;//特例
for(int i=3;i<=n;i++) add(i);
for(int i = x; i>=1; --i) cout << a[n][i];//注意要逆序输出
return 0;
}