Submission

Status:
---------

Score: 0

User: Jokul

Problemset: บวกเลขฐาน

Language: c

Time: 0.001 second

Submitted On: 2025-03-01 17:36:55

#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 '0' + value;
    } else {
        return 'a' + (value - 10);
    }
}

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 to hold 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 string
    for (int i = 0; i < index / 2; i++) {
        char temp = result[i];
        result[i] = result[index - i - 1];
        result[index - i - 1] = 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 the first number in base %d: ", base);
    scanf("%s", num1);
    printf("Enter the second number in base %d: ", base);
    scanf("%s", num2);

    int decimalNum1 = baseToDecimal(num1, base);
    int decimalNum2 = baseToDecimal(num2, base);
    int sum = decimalNum1 + decimalNum2;

    char* result = decimalToBase(sum, base);
    printf("The sum of %s and %s in base %d is: %s\n", num1, num2, base, result);

    return 0;
}