高精度:数楼梯

题目描述

楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶。

编一个程序,计算共有多少种不同的走法。

输入格式

一个数字,楼梯数。

输出格式

走的方式几种。

输入输出样例

输入 #1 
4
输出 #1 
5

说明/提示

60% N<=50
100% N<=5000)

思路:一开始自己写得了40分,没想到还有高精度部分,看了一下题解,用一个二维数组来保存,如果当前大于10就进位,最后倒序输出。

 1 #include<iostream>
 2 #include<algorithm>
 3 
 4 using namespace std;
 5 
 6 int n, len = 1, f[5003][5003]; //f[k][i]对应第k阶台阶对应的走法数
 7 void hp(int k)
 8 {
 9     int i;
10 
11     for (i = 1; i <= len; i++)
12     {
13         f[k][i] = f[k - 1][i] + f[k - 2][i];
14     }
15 
16     for (i = 1; i <= len; i++)
17     {
18         if (f[k][i] >= 10)
19         {
20             f[k][i + 1] += f[k][i] / 10;
21             f[k][i] = f[k][i] % 10;
22             if (f[k][len + 1])
23             {
24                 len++;
25             }
26         }
27     }
28 }
29 
30 int main()
31 {
32     int i;
33 
34     cin >> n;
35 
36     f[1][1] = 1;
37     f[2][1] = 2;
38     for (i = 3; i <= n; i++) //从第三阶开始
39     {
40         hp(i);
41     }
42     for (i = len; i >= 1; i--)
43     {
44         cout << f[n][i];
45     }
46     return 0;
47 }

猜你喜欢

转载自www.cnblogs.com/ZhengLijie/p/12719989.html
今日推荐