Submission
Status:
PPPPPPPPP
Subtask/Task Score:
100/100
Score: 100
User: chokun
Problemset: บวกเลขฐาน
Language: cpp
Time: 0.004 second
Submitted On: 2026-10-05 21:30:07
#include <bits/stdc++.h>
using namespace std;
// ฟังก์ชันแปลงอักขระเป็นมูลค่าตัวเลข (รองรับ A-F)
int charToInt(char c) {
if (c >= '0' && c <= '9') return c - '0';
if (c >= 'A' && c <= 'F') return c - 'A' + 10;
if (c >= 'a' && c <= 'f') return c - 'a' + 10;
return 0;
}
// ฟังก์ชันแปลงตัวเลขเป็นอักขระเลขฐาน (รองรับ A-F)
char intToChar(int n) {
if (n >= 0 && n <= 9) return '0' + n;
return 'A' + (n - 10);
}
// 1. ฟังก์ชันแปลงจากฐาน X เป็นฐาน 10
long long toBase10(string num, int base) {
long long val = 0;
long long power = 1;
// ไล่คำนวณจากหลักหน่วย (ขวาสุด) ไปข้างหน้า
for (int i = num.length() - 1; i >= 0; i--) {
val += charToInt(num[i]) * power;
power *= base;
}
return val;
}
// 2. ฟังก์ชันแปลงจากฐาน 10 กลับไปเป็นฐาน X
string fromBase10(long long num, int base) {
if (num == 0) return "0";
string result = "";
while (num > 0) {
result += intToChar(num % base);
num /= base;
}
// เนื่องจากคิดจากเศษด้านหลัง ให้กลับด้านสตริงก่อนส่งออก
reverse(result.begin(), result.end());
return result;
}
int main() {
int base;
string num1, num2;
// รับอินพุตตามรูปแบบโจทย์
// (แสดงข้อความ guide เล็กน้อยเพื่อให้ป้อนง่าย หรือลบออกให้ตรงตาม console ตัวอย่างได้ครับ)
cin >> base;
cin >> num1;
cin >> num2;
// แปลงทั้งสองจำนวนเป็นฐาน 10 แล้วนำมาบวกกัน
long long n1_base10 = toBase10(num1, base);
long long n2_base10 = toBase10(num2, base);
long long sum_base10 = n1_base10 + n2_base10;
// แปลงผลรวมกลับไปเป็นฐานเดิมเพื่อเป็น OUTPUT
string output = fromBase10(sum_base10, base);
cout << output << endl;
return 0;
}