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