数楼梯

要想知道到达哪一个楼梯有多少种,需要知道到达前两个楼梯分别需要的方法数,因为可以走一阶或者两阶,所以到达该层楼梯的前一步可以走一阶也可以走两阶,因此需要知道前两个阶数的方法,所以这就是一个斐波那契数列,但是所给楼梯数较大,所以需要用到高精度加,设立一个二维数组,记录每一阶的方法数

代码如下:

#include<stdio.h>

int gogo[10000][10000];
int len = 1;
void  jia(int m)
{
    for (int i = 1; i <= len; i++)
    {
        gogo[m][i] = gogo[m - 1][i] + gogo[m - 2][i];
    }
    for (int i = 1; i <= len; i++)
    {
        if (gogo[m][i] > 9)
        {
            gogo[m][i + 1] += gogo[m][i] / 10;
            gogo[m][i] %= 10;
            if (i == len)
                len++;
        }
    }
    for (int i = len; gogo[m][i] == 0; i--)
    {
        len--;
    }
    return;
}


int main(void)
{
    int n;
    scanf("%d", &n);
    gogo[1][1] = 1;
    gogo[2][1] = 2;
    for (int i = 3; i <= n; i++)
    {
        jia(i);
    }
    for (int i = len; i > 0; i--)
    {
        printf("%d", gogo[n][i]);
    }
    return 0;
}

 

posted @ 2021-01-20 17:40  loliconsk  阅读(271)  评论(0)    收藏  举报