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