Submission

Status:

P-----PP-

Subtask/Task Score:

36/100

Score: 36

User: sakurajima

Problemset: บวกเลขฐาน

Language: cpp

Time: 0.004 second

Submitted On: 2026-09-26 21:17:49

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

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int base;
    string num1, num2;
    cin >> base >> num1 >> num2;

    string output = "";
    

    unordered_map<char, int> value = {
        {'1', 1}, {'2', 2}, {'3', 3}, {'4', 4}, {'5', 5},
        {'6', 6}, {'7', 7}, {'8', 8}, {'9', 9}, {'A', 10},
        {'B', 11}, {'C', 12}, {'D', 13}, {'E', 14}, {'F', 15}
    };

    if (num1.size() < num2.size()) {
        string temp = num1;
        num1 = num2;
        num2 = temp;
    }
    
    int i = num1.size() - 1;
    int j = num2.size() - 1;
    int carry = 0;

    for (int x = 0; x < num2.size(); x++) {
        int digits = value[num1[i]] + value[num2[j]];
        int digit = digits % base;

        if (digit < 10) {
            output += to_string(digit + carry);
        }
        else {
            if (digits + carry < base) {
                output += char((((digit + carry)) % 10) + 'A');
            }
            else {
                output += char((((digit + carry) % base) % 10) + 'A');
            }
        }

        carry = (digits + carry) / base;

        i--;
        j--;
    }

    for (int x = 0; x < num1.size() - num2.size(); x++) {
        output += num1[i] + carry;
        carry = (num1[i] + carry) / base;
    }

    if (carry) {
        output += to_string(carry);
    }

    reverse(output.begin(), output.end());

    cout << output;

}