题目描述
楼梯有 N 阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
输入格式
一个数字,楼梯数。
输出格式
输出走的方式总数。
输入输出样例
输入 #1
4
输出 #1
5
说明/提示
- 对于60% 的数据,N≤50;
- 对于100% 的数据,1≤N≤5000。
总的来说,不算难的一道题,很容易想到到第n阶的方法数等于到第n-1阶的方法数与到第n-2阶的方法数之和,因为第n-1到第n阶需要1步,因为第n-2到第n阶需要2步。
这道题的关键在于高精度。
#include <iostream>
using namespace std;
int num[5005][5005];
int main()
{
int i,n,j,l = 0;
num[1][0] = 1,num[2][0] = 2;
cin >> n;
for(i = 3;i <= n;i++)
{
for(j = 0;j <= l;j++)
{
num[i][j] = num[i-1][j] + num[i-2][j];
}
for(j = 0;j <= l;j++)
{
if(num[i][j] >= 10)
{
num[i][j+1] += num[i][j]/10;
num[i][j] %= 10;
if(num[i][l+1] > 0)
{
l++;
}
}
}
}
for(i = l;i >= 0;i--)
cout << num[n][i];
return 0;
}