Submission

Status:

---------

Subtask/Task Score:

0/100

Score: 0

User: angpangSK

Problemset: บวกเลขฐาน

Language: c

Time: 0.002 second

Submitted On: 2025-09-23 12:05:38

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