PAT B1113 钱串子的加法

#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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容