高精度-刷题
上一个博客给大家讲解了高精度的加法和乘法,那么这个博客我们一起来看一道题目 P1255
P1255 走楼梯
题目描述
楼梯有 N 阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
输入格式
一个数字,楼梯数。
输出格式
输出走的方式总数。
解析
有同学看到这道题就开始用递归或递推做了,那么我告诉你,递归会超时,递推出来,n=5000时,方法总数long long都存不下。所以考虑什么?–高精度加法
其实这道题是典型的斐波那契数列问题,什么是斐波那契数列?这个数等于前两个数的和。我们需要一个二维数组数组存储第k阶台阶所对应的走法数,将f[1][1]=1; f[2][1]=2; 再套用斐波那契数列的公式从3开始计算,高精度加法,最后逆序输出即可
代码
#include<iostream>
using namespace std;
int n,len=1,f[5010][5010];
void jia(int k)//高精度加法
{
int i;
for(i=1;i<=len;i++)
f[k][i]=f[k-1][i]+f[k-2][i];//套用斐波那契公式