Submission
Status:
-----
Score: 0
User: Jokul
Problemset: หินงอก
Language: c
Time: 0.001 second
Submitted On: 2025-03-01 10:40:25
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void addNumbersInBase(const char *num1, const char *num2, int base, char *result) {
int len1 = strlen(num1);
int len2 = strlen(num2);
int maxLength = (len1 > len2 ? len1 : len2) + 1; // +1 for possible carry
int carry = 0;
int index = 0;
// Reverse the strings to make addition easier
char revNum1[20], revNum2[20];
for (int i = 0; i < len1; i++) {
revNum1[i] = num1[len1 - 1 - i];
}
revNum1[len1] = '\0';
for (int i = 0; i < len2; i++) {
revNum2[i] = num2[len2 - 1 - i];
}
revNum2[len2] = '\0';
// Perform addition
for (int i = 0; i < maxLength; i++) {
int digit1 = (i < len1) ? (isdigit(revNum1[i]) ? revNum1[i] - '0' : toupper(revNum1[i]) - 'A' + 10) : 0;
int digit2 = (i < len2) ? (isdigit(revNum2[i]) ? revNum2[i] - '0' : toupper(revNum2[i]) - 'A' + 10) : 0;
int sum = digit1 + digit2 + carry;
carry = sum / base;
int resultDigit = sum % base;
if (resultDigit < 10) {
result[index++] = resultDigit + '0';
} else {
result[index++] = (resultDigit - 10) + 'A';
}
}
// If there's a carry left, add it
if (carry > 0) {
if (carry < 10) {
result[index++] = carry + '0';
} else {
result[index++] = (carry - 10) + 'A';
}
}
result[index] = '\0';
// Reverse the result to get the final answer
for (int i = 0; i < index / 2; i++) {
char temp = result[i];
result[i] = result[index - 1 - i];
result[index - 1 - i] = temp;
}
}
int main() {
int base;
char num1[20], num2[20], result[21]; // +1 for possible carry
// Input base
printf("Base: ");
scanf("%d", &base);
// Input two numbers
printf("Num1: ");
scanf("%s", num1);
printf("Num2: ");
scanf("%s", num2);
// Add numbers in the specified base
addNumbersInBase(num1, num2, base, result);
// Output the result
printf("OUTPUT %s\n", result);
return 0;
}