Submission
Status:
PPPPPPPPP
Subtask/Task Score:
100/100
Score: 100
User: angpangSK
Problemset: บวกเลขฐาน
Language: c
Time: 0.003 second
Submitted On: 2025-09-23 20:19:56
#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;
}
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 '?';
}
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';
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;
scanf("%d", &base);
char num1[100], num2[100];
scanf("%s", num1);
scanf("%s", num2);
char result[200];
add_numbers_in_base(num1, num2, base, result);
printf("%s", result);
return 0;
}