Submission

Status:

PP---PPPP

Subtask/Task Score:

72/100

Score: 72

User: Hax

Problemset: บวกเลขฐาน

Language: cpp

Time: 0.004 second

Submitted On: 2026-10-12 17:32:19

#include <bits/stdc++.h>
#include <string>

using namespace std;

int main() {
    int base;
    string num1;
    string num2;
    string val = "0123456789ABCDEF";
    int digitSum = 0;
    int carry = 0;
    cin >> base >> num1 >> num2;

    for (int i = 0; i < num1.length(); i ++) {
        num1[i] = toupper(num1[i]);
    }
    for (int i = 0; i < num2.length(); i ++) {
        num2[i] = toupper(num2[i]);
    }

    while (num1.length() < num2.length()) {
        num1 = "0" + num1;
    }
    while (num2.length() < num1.length()) {
        num2 = "0" + num2;
    }

    int len = num1.length();
    string ans(len, '0');
    for (int i = 0; i < len - 1; i ++) {
        int a = val.find(num1[len - 1 - i]);
        int b = val.find(num2[len - 1 - i]);
        digitSum = a + b + carry;
        ans[len - 1 - i] = val[digitSum % base];
        carry = digitSum / base;
    }

    int top = (int)val.find(num1[0]) + (int)val.find(num2[0]) + carry;
    string res;
    if (top < base) {
        res = val[top] + ans.substr(1);
    } else {
        res = to_string(top) + ans.substr(1);
    }

    int start = 0;
    while (start < res.length() - 1 && res[start] == '0') {
        start ++;
    }

    cout << res.substr(start) << endl;
}