Submission
Status:
---------
Subtask/Task Score:
0/100
Score: 0
User: angpangSK
Problemset: บวกเลขฐาน
Language: c
Time: 0.001 second
Submitted On: 2025-09-23 12:06:30
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int char_to_value(char c) {
if (c >= '0' && c <= '9') {
return c - '0';
} else if (c >= 'A' && c <= 'F') {
return c - 'A' + 10;
} else if (c >= 'a' && c <= 'f') {
return c - 'a' + 10;
}
return -1; // Invalid character
}
char value_to_char(int value) {
if (value >= 0 && value <= 9) {
return '0' + value;
} else if (value >= 10 && value <= 15) {
return 'A' + (value - 10);
}
return '?'; // Invalid value
}
void add_numbers_in_base(char* num1, char* num2, int base, char* result) {
int len1 = strlen(num1);
int len2 = strlen(num2);
int max_len = (len1 > len2) ? len1 : len2;
int carry = 0;
int idx1 = len1 - 1, idx2 = len2 - 1, idx_result = 0;
while (idx1 >= 0 || idx2 >= 0 || carry) {
int digit1 = (idx1 >= 0) ? char_to_value(num1[idx1--]) : 0;
int digit2 = (idx2 >= 0) ? char_to_value(num2[idx2--]) : 0;
int sum = digit1 + digit2 + carry;
result[idx_result++] = value_to_char(sum % base);
carry = sum / base;
}
result[idx_result] = '\0';
// Reverse the result to get the correct order
for (int i = 0; i < idx_result / 2; i++) {
char temp = result[i];
result[i] = result[idx_result - i - 1];
result[idx_result - i - 1] = temp;
}
}
int main() {
int base;
printf("Base: ");
scanf("%d", &base);
if (base < 2 || base > 16) {
printf("Invalid base\n");
return 0;
}
char num1[100], num2[100];
printf("Num1: ");
scanf("%s", num1);
printf("Num2: ");
scanf("%s", num2);
char result[200];
add_numbers_in_base(num1, num2, base, result);
printf("OUTPUT %s\n", result);
return 0;
}