Submission

Status:
---------

Score: 0

User: Jokul

Problemset: บวกเลขฐาน

Language: c

Time: 0.001 second

Submitted On: 2025-03-01 18:01:17

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int charToValue(char c) {
    if (isdigit(c)) {
        return c - '0';
    } else if (isalpha(c)) {
        return tolower(c) - 'a' + 10;
    }
    return -1; // Invalid character
}

char valueToChar(int value) {
    if (value < 10) {
        return value + '0';
    } else {
        return value - 10 + 'A'; // Change to uppercase letters for A-F
    }
}

int baseToDecimal(const char *num, int base) {
    int decimalValue = 0;
    int length = strlen(num);
    for (int i = 0; i < length; i++) {
        int value = charToValue(num[i]);
        if (value < 0 || value >= base) {
            printf("Invalid character '%c' for base %d\n", num[i], base);
            exit(1);
        }
        decimalValue = decimalValue * base + value;
    }
    return decimalValue;
}

char *decimalToBase(int decimal, int base) {
    static char result[32]; // Buffer for the result
    int index = 0;

    if (decimal == 0) {
        result[index++] = '0';
    } else {
        while (decimal > 0) {
            result[index++] = valueToChar(decimal % base);
            decimal /= base;
        }
    }
    result[index] = '\0';

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

    return result;
}

int main() {
    int base;
    char num1[32], num2[32];

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

    printf("Enter first number: ");
    scanf("%s", num1);
    printf("Enter second number: ");
    scanf("%s", num2);

    // Convert both numbers to decimal
    int decimalNum1 = baseToDecimal(num1, base);
    int decimalNum2 = baseToDecimal(num2, base);

    // Perform addition
    int sum = decimalNum1 + decimalNum2;

    // Convert the sum back to the original base
    char *result = decimalToBase(sum, base);

    printf("Result: %s\n", result);
    return 0;
}