数楼梯(斐波那契数列+高精度)

 逆序思维

当爬到第K级台阶时,上一步只有两种可能,一种是位于K-1,一种是位于K-2

参考https://www.luogu.com.cn/blog/user7117/solution-p1255

#include<iostream>
#include<string>
using namespace std;
 
const int Max = 5050;
int n, len = 1, f[Max][Max];
void floor(int k)
{
    int i;
    for (i = 1; i <= len; i ++)
      f[k][i] = f[k - 1][i] + f[k - 2][i];  //套用计算公式 
    for (i = 1; i <= len; i ++)
      if (f[k][i] >= 10)  //进位 
      {
          f[k][i + 1] += f[k][i] / 10;
          f[k][i] %= 10;
          if (f[k][len + 1])
            len ++;
      }
}

int main()
{
    int i;
    cin >> n;
    f[1][1] = 1;  //初始化 
    f[2][1] = 2;
    cin >> n;
    for (i = 3; i <= n; i ++)  //从3开始避免越界 
      floor(i);
    for (i = len; i > 0; i --)  //逆序输出 
      cout << f[n][i];
    return 0;
} 
原文地址:https://www.cnblogs.com/Es-war/p/12449890.html