P1601 A+B Problem(高精)


// Problem: P1601 A+B Problem(高精)
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1601
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// User: Pannnn

#include 

using namespace std;

vector sum(vector a, vector b) {
    vector res;
    
    // 标记进位
    int p = 0;
    for (int i = 0; i < a.size() || i < b.size(); ++i) {
        if (i < a.size()) {
            p += a[i];
        }
        if (i < b.size()) {
            p += b[i];
        }
        res.push_back(p % 10);
        p /= 10;
    }
    // 如果最后进位值不是0,再进1位
    if (p) {
        res.push_back(p);
    }
    return res;
}

// 将字符串反转并将字符对应数值存到vector中
vector reverse(string num) {
    vector res;
    for (int i = num.length() - 1; i >= 0; --i) {
        res.push_back(num[i] - '0');
    }
    return res;
}

int main() {
    string a, b;
    cin >> a >> b;
    /*
    由于数值很大,以字符串格式读入后进行处理
    模拟加法运算,从最后一位往前依次相加,用一个变量保存进位
    由于最后可能会有进位,如果数值正向存储可能需要整体移动
    所以将数值进行逆序,如果有进位仅需在最后添加,最后倒序输出
    */
    vector num1 = reverse(a);
    vector num2 = reverse(b);
    vector res = sum(num1, num2);
    for (int i = res.size() - 1; i >= 0; --i) {
        cout << res[i];
    }
    cout << endl;
    return 0;
}

相关