数楼梯高精度

洛谷1255,数楼梯

概念

特高精度 long long也无法满足,就要用string或者数组存放数字

方法

斐波那契+高精度

代码

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int f[5010][5010],len=1,n;

void stair(int k){
    for(int i= 1;i<=len;i++){
        f[k][i] = f[k-1][i]+f[k-2][i];
       
    }
    //然后将每位缩小为个位
    for(int i =1;i<=len;i++){
        if(f[k][i]>=10){
            f[k][i+1] += f[k][i]/10;
            f[k][i]=f[k][i]%10;
            if(f[k][len+1]>0)len++;
        }
    }
    
}
int main(){
    scanf("%d",&n);
    f[1][1]=1;
    f[2][1]=2;
    for(int i = 3;i<=n;i++){
        stair(i);//冲大于3开始,1,2知道,其实还可以更大
    }
    //倒序输出
    for(int i = len;i>=1;i--)
    printf("%d",f[n][i]);
    return 0;

}

posted @ 2022-11-14 09:44  壹剑霜寒十四州  阅读(7)  评论(0编辑  收藏  举报