二刷斐波那契高精度

Posted zhangqiling

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二刷斐波那契高精度相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>

using namespace std;

struct bign{
    int d[10000];
    int len;
    bign(){
        memset(d,0,sizeof(d));
        len = 0;
    }
};

//字符串转到大数中
bign change(char *s){
    bign a;
    a.len = strlen(s);
    for(int i=0; i<a.len; i++){
        a.d[i] = s[a.len - 1 - i] - 0;
    }
    return a;
}
//两个大数相加 
bign add(bign v1, bign v2){
    bign c;
    int carry = 0;//进位
    for(int i=0; i<v1.len || i<v2.len; i++){
        int temp = v1.d[i] + v2.d[i] + carry;
        c.d[c.len++] = temp % 10;
        carry = temp / 10;
    }
    if(carry != 0){
        c.d[c.len++] = carry;
    }
    return c;
}

int main(){
    int n;
    scanf("%d",&n);
    if(n == 0){
        puts("0");
        return 0;
    }
    if(n == 1){
        puts("1");
        return 0;
    }
    if(n == 2){
        puts("2");
        return 0;
    }
    char s1[10000];
    char s2[10000];
    char s3[10000];
    strcpy(s1,"1");
    strcpy(s2,"2");
    int cnt;
    for(int i=3; i<=n; i++){
        bign v1 = change(s1);
        bign v2 = change(s2);
        bign v3 = add(v1,v2);
        for(int i=v3.len - 1,cnt = 0; i>=0; i--,cnt++){
            s3[cnt] = v3.d[i] + 0;
        }
        strcpy(s1,s2);
        strcpy(s2,s3);
    }
    puts(s2);
    return 0;    
} 

 

以上是关于二刷斐波那契高精度的主要内容,如果未能解决你的问题,请参考以下文章

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

蜜蜂路线——有毒的高精 斐波那契

数楼梯——恶心的高精斐波那契数列

UVA-12333 Revenge of Fibonacci(竖式加法模拟 & 字典树)

Luogu P1306 斐波那契公约数

08《算法入门教程》递归算法之斐波那契数列