自编超级无敌高精加法 求大犇优化
  • 板块灌水区
  • 楼主CJR_Rain
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/12/22 12:39
  • 上次更新2024/12/22 14:39:57
查看原帖
自编超级无敌高精加法 求大犇优化
1382345
CJR_Rain楼主2024/12/22 12:39
#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;
}

int main() {

    string n,m;
    cin >> n >> m;

    cout << add(n,m);

    return 0;
}

优化点:

1.这玩意性能实在太拉 算斐波那契数列算到30000位就算不来

2.不支持小数和负数 求优化

2024/12/22 12:39
加载中...