#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 20480
void hex_str_to_num(const char *hex_str, int *num, int len) {
for (int i = 0; i < len; i++) {
char c = hex_str[len - 1 - i];
if (c >= '0' && c <= '9') {
num[i] = c - '0';
}
if (c >= 'A' && c <= 'F') {
num[i] = c - 'A' + 10;
}
}
}
void num_to_hex_str(int *num, int len, char *result) {
int idx = 0;
while (len > 0 && num[len - 1] == 0) {
len--;
}
for (int i = len - 1; i >= 0; i--) {
int digit = num[i];
if (digit < 10) {
result[idx++] = digit + '0';
} else {
result[idx++] = digit - 10 + 'A';
}
}
result[idx] = '\0';
}
void hex_multiply(const char *hex_num1, const char *hex_num2, char *result) {
int len1 = strlen(hex_num1);
int len2 = strlen(hex_num2);
int *product = (int *)malloc((len1 + len2) * sizeof(int));
memset(product, 0, (len1 + len2) * sizeof(int));
int num1[MAX_LEN], num2[MAX_LEN];
hex_str_to_num(hex_num1, num1, len1);
hex_str_to_num(hex_num2, num2, len2);
for (int i = 0; i < len1; i++) {
for (int j = 0; j < len2; j++) {
int mul = num1[i] * num2[j];
int sum = product[i + j] + mul;
product[i + j] = sum % 16;
product[i + j + 1] += sum / 16;
}
}
num_to_hex_str(product, len1 + len2, result);
free(product);
}
int main() {
char line[2 * MAX_LEN + 1];
char hex_num1[MAX_LEN], hex_num2[MAX_LEN], result[2 * MAX_LEN + 1];
while (fgets(line, sizeof(line), stdin) != NULL) {
line[strcspn(line, "\n")] = 0;
sscanf(line, "%s %s", hex_num1, hex_num2);
hex_multiply(hex_num1, hex_num2, result);
printf("%s\n", result);
}
return 0;
}
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 20480
void hex_str_to_num(const char *hex_str, int *num, int len) {
for (int i = 0; i < len; i++) {
char c = hex_str[len - 1 - i];
if (c >= '0' && c <= '9') {
num[i] = c - '0';
}
if (c >= 'A' && c <= 'F') {
num[i] = c - 'A' + 10;
}
}
}
void num_to_hex_str(int *num, int len, char *result) {
int idx = 0;
while (len > 0 && num[len - 1] == 0) {
len--;
}
for (int i = len - 1; i >= 0; i--) {
int digit = num[i];
if (digit < 10) {
result[idx++] = digit + '0';
} else {
result[idx++] = digit - 10 + 'A';
}
}
result[idx] = '\0';
}
void hex_multiply(const char *hex_num1, const char *hex_num2, char *result) {
int len1 = strlen(hex_num1);
int len2 = strlen(hex_num2);
int *product = (int *)malloc((len1 + len2) * sizeof(int));
memset(product, 0, (len1 + len2) * sizeof(int));
int num1[MAX_LEN], num2[MAX_LEN];
hex_str_to_num(hex_num1, num1, len1);
hex_str_to_num(hex_num2, num2, len2);
for (int i = 0; i < len1; i++) {
for (int j = 0; j < len2; j++) {
int mul = num1[i] * num2[j];
int sum = product[i + j] + mul;
product[i + j] = sum % 16;
product[i + j + 1] += sum / 16;
}
}
num_to_hex_str(product, len1 + len2, result);
free(product);
}
int main() {
char line[2 * MAX_LEN + 1];
char hex_num1[MAX_LEN], hex_num2[MAX_LEN], result[2 * MAX_LEN + 1];
while (fgets(line, sizeof(line), stdin) != NULL) {
line[strcspn(line, "\n")] = 0;
sscanf(line, "%s %s", hex_num1, hex_num2);
hex_multiply(hex_num1, hex_num2, result);
printf("%s\n", result);
}
return 0;
}