Submission
Status:
PPPPPPPPP
Subtask/Task Score:
100/100
Score: 100
User: sakurajima
Problemset: บวกเลขฐาน
Language: cpp
Time: 0.004 second
Submitted On: 2026-09-26 21:34:20
#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 = {
{'0', 0},
{'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]] + carry;
int digit = digits % base;
if (digit < 10) {
output += to_string(digit);
}
else {
if (digits < base) {
output += char(((digit) % 10) + 'A');
}
else {
output += char(((digit % base) % 10) + 'A');
}
}
carry = digits / base;
i--;
j--;
}
for (int x = 0; x < num1.size() - num2.size(); x++) {
int digits = value[num1[i]] + carry;
int digit = digits % base;
if (digit < 10) {
output += to_string(digit);
}
else {
if (digits < base) {
output += char(((digit % 10)) + 'A');
}
else {
output += char(((digit % base) % 10) + 'A');
}
}
carry = digits / base;
i--;
}
if (carry != 0) {
output += to_string(carry);
}
reverse(output.begin(), output.end());
cout << output;
}