Submission

Status:
---------

Score: 0

User: Jokul

Problemset: บวกเลขฐาน

Language: c

Time: 0.002 second

Submitted On: 2025-03-01 18:09:58

#include <stdio.h>

int main() {
    int base;
    char num1[32], num2[32];
    int decimalNum1 = 0, decimalNum2 = 0, sum = 0;
    int i, length1, length2;

    printf("Base");
    scanf("%d", &base);
    if (base < 2 || base > 16) {
        printf("Base must be between 2 and 16.\n");
        return 1;
    }

    printf("Num1");
    scanf("%s", num1);
    printf("Num2");
    scanf("%s", num2);

    // Convert first number to decimal
    for (length1 = 0; num1[length1] != '\0'; length1++);
    for (i = 0; i < length1; i++) {
        int value;
        if (num1[i] >= '0' && num1[i] <= '9') {
            value = num1[i] - '0';
        } else if (num1[i] >= 'A' && num1[i] <= 'F') {
            value = num1[i] - 'A' + 10;
        } else if (num1[i] >= 'a' && num1[i] <= 'f') {
            value = num1[i] - 'a' + 10;
        } else {
            printf("Invalid character '%c' in first number.\n", num1[i]);
            return 1;
        }
        if (value < 0 || value >= base) {
            printf("Invalid character '%c' for base %d\n", num1[i], base);
            return 1;
        }
        decimalNum1 = decimalNum1 * base + value;
    }

    // Convert second number to decimal
    for (length2 = 0; num2[length2] != '\0'; length2++);
    for (i = 0; i < length2; i++) {
        int value;
        if (num2[i] >= '0' && num2[i] <= '9') {
            value = num2[i] - '0';
        } else if (num2[i] >= 'A' && num2[i] <= 'F') {
            value = num2[i] - 'A' + 10;
        } else if (num2[i] >= 'a' && num2[i] <= 'f') {
            value = num2[i] - 'a' + 10;
        } else {
            printf("Invalid character '%c' in second number.\n", num2[i]);
            return 1;
        }
        if (value < 0 || value >= base) {
            printf("Invalid character '%c' for base %d\n", num2[i], base);
            return 1;
        }
        decimalNum2 = decimalNum2 * base + value;
    }

    // Perform addition
    sum = decimalNum1 + decimalNum2;

    // Convert the sum back to the original base
    char result[32];
    int index = 0;

    if (sum == 0) {
        result[index++] = '0';
    } else {
        while (sum > 0) {
            int remainder = sum % base;
            if (remainder < 10) {
                result[index++] = remainder + '0';
            } else {
                result[index++] = remainder - 10 + 'A'; // Use uppercase letters for A-F
            }
            sum /= base;
        }
    }
    result[index] = '\0';

    // Reverse the result
    for (i = 0; i < index / 2; i++) {
        char temp = result[i];
        result[i] = result[index - 1 - i];
        result[index - 1 - i] = temp;
    }

    printf("OUTPUT%s", result);
    return 0;
}