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