PAT B1113 钱串子的加法

2025-04-15  本文已影响0人  梅友泥撑
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
    string a, b;
    vector<int> ans;
    int digit, carry = 0, i, j;
    cin >> a >> b;
    int len = a.length() > b.length() ? b.length() : a.length();
    reverse(a.begin(),a.end());
    reverse(b.begin(), b.end());
    for (i = 0; i < len; i++) {
        int sum = (a[i] - '0' < 10 ? a[i] - '0' : a[i] - 'a' + 10) + (b[i] - '0' < 10 ? b[i] - '0' : b[i] - 'a' + 10);
        sum += carry;
        digit = sum % 30;
        carry = sum / 30;
        ans.push_back(digit);
    }
    while (i < a.length()) {
        int sum = (a[i] - '0' < 10 ? a[i] - '0' : a[i] - 'a' + 10);
        sum += carry;
        digit = sum % 30;
        carry = sum / 30;
        ans.push_back(digit);
        i++;
    }
    while (i < b.length()) {
        int sum = (b[i] - '0' < 10 ? b[i] - '0' : b[i] - 'a' + 10);
        sum += carry;
        digit = sum % 30;
        carry = sum / 30;
        ans.push_back(digit);
        i++;
    }
    if (carry > 0) {
        ans.push_back(1);
    }
    while (ans[ans.size()-1] == 0) {
        ans.pop_back();
        if (ans.size() == 0) {
            cout << "0" << endl;
            return 0;
        }
    }
    reverse(ans.begin(), ans.end());
    for(auto it = ans.begin(); it != ans.end(); it++) {
        if ((*it) >= 10) {
            cout << (char)('a' + ((*it) - 10));
        }
        else {
            cout << (*it);
        }
    }
    cout << endl;
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读