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;
}