数楼梯(斐波拉契数列+高精度加法)

来源:互联网 发布:有效工作时间 知乎 编辑:程序博客网 时间:2024/06/06 01:17

数楼梯

题目描述:
楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
输入输出格式
输入格式:
一个数字,楼梯数。
输出格式:
走的方式几种。
输入输出样例
输入样例#1:
4
输出样例#1:
5
说明:
用递归会太慢,需用递推
(60% N<=50 ,100% N<=5000)

#include<iostream>#include<cstring>using namespace std;const int maxn=5010;int n;struct node{    int f[1050];    int len;}ans[maxn];node add(node a,node b){    node c;c.len=1;    memset(c.f,0,sizeof(c.f));    int x=0;    while(c.len<=a.len||c.len<=b.len)    {        c.f[c.len]=a.f[c.len]+b.f[c.len]+x;        x=c.f[c.len]/10;        c.f[c.len]=c.f[c.len]%10;        c.len++;    }    c.f[c.len]=x;    if(c.f[c.len]==0)    c.len--;    return c;}int main(){    cin>>n;    ans[0].f[1]=0;    ans[0].len=1;    ans[1].f[1]=1;    ans[1].len=1;    ans[2].f[1]=2;    ans[2].len=1;    for(int i=3;i<=n;i++)    ans[i]=add(ans[i-2],ans[i-1]);    for(int i=ans[n].len;i>=1;i--)    cout<<ans[n].f[i];    return 0;}
0 0
原创粉丝点击