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