分治法做大整数加法

#include<bits/stdc++.h>
using namespace std;

string add(string a,string b)
{
    if(a.length()<=8 && b.length()<=8)
    {
        int c=atoi(a.c_str())+atoi(b.c_str());
        char s[10];
        sprintf(s,"%d",c);
        return string(s);
    }
    string a1="0",a2=a;
    if(a.length()>8)
    {
        a1=a.substr(0,a.length()-8);
        a2=a.substr(a.length()-8);
    }
    string b1="0",b2=b;
    if(b.length()>8)
    {
        b1=b.substr(0,b.length()-8);
        b2=b.substr(b.length()-8);
    }
    string t=add(a2,b2);
    while(t.length()<8) t="0"+t;
    if(t.length()>8) return add(add(a1,b1),"1")+t.substr(1);
    return add(a1,b1)+t;
}

int main()
{
    string a,b;
    cin>>a>>b;
    cout<<add(a,b);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/armerzu/article/details/81532866