不求优化了 分享个自编代码吧
  • 板块灌水区
  • 楼主CJR_Rain
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/12/22 14:10
  • 上次更新2024/12/22 14:39:30
查看原帖
不求优化了 分享个自编代码吧
1382345
CJR_Rain楼主2024/12/22 14:10

高精斐波那契数列:

#include<iostream>

using namespace std;

string add(string x, string y){

    string sum = "";

    bool plus_one = false, xone = false, yone = false;
    unsigned long long xlen = x.size() - 1, ylen = y.size() - 1;
    
    for(unsigned long long i = 0; i < max(x.size(),y.size()); ++i) {

        if(xone == true) {

            if(plus_one == true) {

                sum[i] += y[ylen - i] - '0';
                plus_one = false;

                if(sum[i] > '9'){

                    sum[i] -= 10;
                    sum += '1';
                    plus_one = true;
                }
            }

            else {

                sum += '0' + (y[ylen - i] - '0');
            }
        }

        else if(yone == true) {

            if(plus_one == true) {

                sum[i] += x[xlen - i] - '0';
                plus_one = false;

                if(sum[i] > '9'){

                    sum[i] -= 10;
                    sum += '1';
                    plus_one = true;
                }
            }

            else {
                
                sum += '0' + (x[xlen - i] - '0');
            }
        }

        else {

            if(xlen - i == 0){

                xone = true;
            }

            if(ylen - i == 0){

                yone = true;
            }

            if(plus_one == true) {

                sum[i] += ((x[xlen - i] - '0') + (y[ylen - i] - '0')) % 10;
                plus_one = false;

                if(sum[i] > '9') {

                    sum[i] -= 10;
                    plus_one = true;
                }
            }

            else {

                sum += '0' + (((x[xlen - i] - '0') + (y[ylen - i] - '0')) % 10);
            }

            if('0' + (x[xlen - i] - '0') + (y[ylen - i] - '0') > '9' || plus_one == true) {

                sum += '1';
                plus_one = true;
            }
        }
    }
    
    for(unsigned long long i = 0, t = sum.size() - 1; i < t; ++i, --t) {
        
        char tmp = sum[i];
        sum[i] = sum[t];
        sum[t] = tmp;
    }

    return sum;
}

void sub_one(string *x) {
    
    unsigned long long k = x -> size() - 1;
    
    while(x -> substr(k,1) == "0") {
        
        --k;
    }
    
    if(k == x -> size() - 1) {
        
        char tmp = *(--(x -> end()));
        x -> erase(--(x -> end()));
        x -> insert(x -> end(), tmp - 1);
    }
    
    else {
        
        char tmp = *(x -> begin() + k);
        x -> erase(x -> begin() + k);
        
        if(k != 0 || tmp != '1') {
            
            x -> insert(x -> begin() + k, tmp - 1);
            
            while(k != x -> size() - 1) {
                
                ++k;
                x -> erase(x -> begin() + k);
                x -> insert(x -> begin() + k, '9');
            }
        }
        
        else {
            
            while(k != x -> size()) {
                
                x -> erase(x -> begin() + k);
                x -> insert(x -> begin() + k, '9');
                ++k;
            }
        }
    }
    
    return;
}

string ans = "1", m = "0", n = "0";

int main() {
    
    string a;
    cin >> a;
    
    while(a != "0") {
        
        sub_one(&a);
        ans = add(ans,n);
        n = m;
        m = ans;
    }
    
    cout << ans;

    return 0;
}

理论上可以求到斐波那契数列的第26412^{64}-1项(?)

2024/12/22 14:10
加载中...