Submission
Status:
PPPPPPPPP
Subtask/Task Score:
100/100
Score: 100
User: Hax
Problemset: บวกเลขฐาน
Language: cpp
Time: 0.004 second
Submitted On: 2026-10-12 17:36:03
#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 if (top <= 9) {
res = val[top] + ans.substr(1);
} else {
res = val[top / base] + string(1, val[top % base]) + ans.substr(1);
}
int start = 0;
while (start < res.length() - 1 && res[start] == '0') {
start ++;
}
cout << res.substr(start) << endl;
}