#include <stdio.h>
#define LEN 100
void sum(int *buff1, int len1, int *buff2, int len2, int *result, int *result_length);
void sub(int *buff1, int len1, int *buff2, int len2, int *result, int *result_length);
int compare(int *buff1, int len1, int *buff2, int len2);
int main() {
int num1[LEN], num2[LEN];
int len1 = 0, len2 = 0;
int result_sum[LEN + 1], result_sub[LEN];
int result_length_sum, result_length_sub;
// Чтение первого числа
while (len1
< LEN
&& scanf("%d", &num1
[len1
]) == 1 && num1
[len1
] >= 0 && num1
[len1
] <= 9) { len1++;
}
// Чтение второго числа
while (len2
< LEN
&& scanf("%d", &num2
[len2
]) == 1 && num2
[len2
] >= 0 && num2
[len2
] <= 9) { len2++;
}
// Выполнение сложения
sum(num1, len1, num2, len2, result_sum, &result_length_sum);
// Выполнение вычитания
if (compare(num1, len1, num2, len2) >= 0) {
sub(num1, len1, num2, len2, result_sub, &result_length_sub);
} else {
return 0;
}
// Вывод результата сложения
for (int i = 0; i < result_length_sum; ++i) {
}
// Вывод результата вычитания
for (int i = 0; i < result_length_sub; ++i) {
}
return 0;
}
void sum(int *buff1, int len1, int *buff2, int len2, int *result, int *result_length) {
int carry = 0, i;
int max_len = len1 > len2 ? len1 : len2;
for (i = 0; i < max_len; i++) {
int digit1 = (i < len1) ? buff1[len1 - 1 - i] : 0;
int digit2 = (i < len2) ? buff2[len2 - 1 - i] : 0;
int total = digit1 + digit2 + carry;
result[max_len - i] = total % 10; // Записываем последнюю цифру
carry = total / 10; // Остаток становится переносом
}
if (carry > 0) {
result[0] = carry; // Если остался перенос, записываем его
*result_length = max_len + 1;
} else {
for (i = 0; i < max_len; i++) {
result[i] = result[i + 1]; // Сдвигаем массив
}
*result_length = max_len;
}
}
void sub(int *buff1, int len1, int *buff2, int len2, int *result, int *result_length) {
int borrow = 0, i;
for (i = 0; i < len1; i++) {
int digit1 = buff1[len1 - 1 - i];
int digit2 = (i < len2) ? buff2[len2 - 1 - i] : 0;
if (digit1 < digit2 + borrow) {
digit1 += 10;
borrow = 1;
} else {
borrow = 0;
}
result[len1 - 1 - i] = digit1 - digit2 - borrow;
}
// Удаление ведущих нулей
*result_length = len1;
while (*result_length > 1 && result[len1 - *result_length] == 0) {
(*result_length)--;
}
}
int compare(int *buff1, int len1, int *buff2, int len2) {
if (len1 != len2) {
return len1 - len2; // Сравниваем длины
}
for (int i = 0; i < len1; i++) {
if (buff1[i] != buff2[i]) {
return buff1[i] - buff2[i]; // Сравниваем элементы
}
}
return 0; // Числа равны
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIExFTiAxMDAKCnZvaWQgc3VtKGludCAqYnVmZjEsIGludCBsZW4xLCBpbnQgKmJ1ZmYyLCBpbnQgbGVuMiwgaW50ICpyZXN1bHQsIGludCAqcmVzdWx0X2xlbmd0aCk7CnZvaWQgc3ViKGludCAqYnVmZjEsIGludCBsZW4xLCBpbnQgKmJ1ZmYyLCBpbnQgbGVuMiwgaW50ICpyZXN1bHQsIGludCAqcmVzdWx0X2xlbmd0aCk7CmludCBjb21wYXJlKGludCAqYnVmZjEsIGludCBsZW4xLCBpbnQgKmJ1ZmYyLCBpbnQgbGVuMik7CgppbnQgbWFpbigpIHsKICAgIGludCBudW0xW0xFTl0sIG51bTJbTEVOXTsKICAgIGludCBsZW4xID0gMCwgbGVuMiA9IDA7CiAgICBpbnQgcmVzdWx0X3N1bVtMRU4gKyAxXSwgcmVzdWx0X3N1YltMRU5dOwogICAgaW50IHJlc3VsdF9sZW5ndGhfc3VtLCByZXN1bHRfbGVuZ3RoX3N1YjsKCiAgICAvLyDQp9GC0LXQvdC40LUg0L/QtdGA0LLQvtCz0L4g0YfQuNGB0LvQsAogICAgd2hpbGUgKGxlbjEgPCBMRU4gJiYgc2NhbmYoIiVkIiwgJm51bTFbbGVuMV0pID09IDEgJiYgbnVtMVtsZW4xXSA+PSAwICYmIG51bTFbbGVuMV0gPD0gOSkgewogICAgICAgIGxlbjErKzsKICAgIH0KICAgIAogICAgLy8g0KfRgtC10L3QuNC1INCy0YLQvtGA0L7Qs9C+INGH0LjRgdC70LAKICAgIHdoaWxlIChsZW4yIDwgTEVOICYmIHNjYW5mKCIlZCIsICZudW0yW2xlbjJdKSA9PSAxICYmIG51bTJbbGVuMl0gPj0gMCAmJiBudW0yW2xlbjJdIDw9IDkpIHsKICAgICAgICBsZW4yKys7CiAgICB9CgogICAgLy8g0JLRi9C/0L7Qu9C90LXQvdC40LUg0YHQu9C+0LbQtdC90LjRjwogICAgc3VtKG51bTEsIGxlbjEsIG51bTIsIGxlbjIsIHJlc3VsdF9zdW0sICZyZXN1bHRfbGVuZ3RoX3N1bSk7CiAgICAKICAgIC8vINCS0YvQv9C+0LvQvdC10L3QuNC1INCy0YvRh9C40YLQsNC90LjRjwogICAgaWYgKGNvbXBhcmUobnVtMSwgbGVuMSwgbnVtMiwgbGVuMikgPj0gMCkgewogICAgICAgIHN1YihudW0xLCBsZW4xLCBudW0yLCBsZW4yLCByZXN1bHRfc3ViLCAmcmVzdWx0X2xlbmd0aF9zdWIpOwogICAgfSBlbHNlIHsKICAgICAgICBwcmludGYoIm4vYVxcbiIpOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIC8vINCS0YvQstC+0LQg0YDQtdC30YPQu9GM0YLQsNGC0LAg0YHQu9C+0LbQtdC90LjRjwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHRfbGVuZ3RoX3N1bTsgKytpKSB7CiAgICAgICAgcHJpbnRmKCIlZCAiLCByZXN1bHRfc3VtW2ldKTsKICAgIH0KICAgIHByaW50ZigiXFxuIik7CgogICAgLy8g0JLRi9Cy0L7QtCDRgNC10LfRg9C70YzRgtCw0YLQsCDQstGL0YfQuNGC0LDQvdC40Y8KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0X2xlbmd0aF9zdWI7ICsraSkgewogICAgICAgIHByaW50ZigiJWQgIiwgcmVzdWx0X3N1YltpXSk7CiAgICB9CiAgICBwcmludGYoIlxcbiIpOwoKICAgIHJldHVybiAwOwp9Cgp2b2lkIHN1bShpbnQgKmJ1ZmYxLCBpbnQgbGVuMSwgaW50ICpidWZmMiwgaW50IGxlbjIsIGludCAqcmVzdWx0LCBpbnQgKnJlc3VsdF9sZW5ndGgpIHsKICAgIGludCBjYXJyeSA9IDAsIGk7CiAgICBpbnQgbWF4X2xlbiA9IGxlbjEgPiBsZW4yID8gbGVuMSA6IGxlbjI7CgogICAgZm9yIChpID0gMDsgaSA8IG1heF9sZW47IGkrKykgewogICAgICAgIGludCBkaWdpdDEgPSAoaSA8IGxlbjEpID8gYnVmZjFbbGVuMSAtIDEgLSBpXSA6IDA7CiAgICAgICAgaW50IGRpZ2l0MiA9IChpIDwgbGVuMikgPyBidWZmMltsZW4yIC0gMSAtIGldIDogMDsKICAgICAgICBpbnQgdG90YWwgPSBkaWdpdDEgKyBkaWdpdDIgKyBjYXJyeTsKICAgICAgICByZXN1bHRbbWF4X2xlbiAtIGldID0gdG90YWwgJSAxMDsgLy8g0JfQsNC/0LjRgdGL0LLQsNC10Lwg0L/QvtGB0LvQtdC00L3RjtGOINGG0LjRhNGA0YMKICAgICAgICBjYXJyeSA9IHRvdGFsIC8gMTA7IC8vINCe0YHRgtCw0YLQvtC6INGB0YLQsNC90L7QstC40YLRgdGPINC/0LXRgNC10L3QvtGB0L7QvAogICAgfQogICAgaWYgKGNhcnJ5ID4gMCkgewogICAgICAgIHJlc3VsdFswXSA9IGNhcnJ5OyAvLyDQldGB0LvQuCDQvtGB0YLQsNC70YHRjyDQv9C10YDQtdC90L7RgSwg0LfQsNC/0LjRgdGL0LLQsNC10Lwg0LXQs9C+CiAgICAgICAgKnJlc3VsdF9sZW5ndGggPSBtYXhfbGVuICsgMTsKICAgIH0gZWxzZSB7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IG1heF9sZW47IGkrKykgewogICAgICAgICAgICByZXN1bHRbaV0gPSByZXN1bHRbaSArIDFdOyAvLyDQodC00LLQuNCz0LDQtdC8INC80LDRgdGB0LjQsgogICAgICAgIH0KICAgICAgICAqcmVzdWx0X2xlbmd0aCA9IG1heF9sZW47CiAgICB9Cn0KCnZvaWQgc3ViKGludCAqYnVmZjEsIGludCBsZW4xLCBpbnQgKmJ1ZmYyLCBpbnQgbGVuMiwgaW50ICpyZXN1bHQsIGludCAqcmVzdWx0X2xlbmd0aCkgewogICAgaW50IGJvcnJvdyA9IDAsIGk7CgogICAgZm9yIChpID0gMDsgaSA8IGxlbjE7IGkrKykgewogICAgICAgIGludCBkaWdpdDEgPSBidWZmMVtsZW4xIC0gMSAtIGldOwogICAgICAgIGludCBkaWdpdDIgPSAoaSA8IGxlbjIpID8gYnVmZjJbbGVuMiAtIDEgLSBpXSA6IDA7CgogICAgICAgIGlmIChkaWdpdDEgPCBkaWdpdDIgKyBib3Jyb3cpIHsKICAgICAgICAgICAgZGlnaXQxICs9IDEwOwogICAgICAgICAgICBib3Jyb3cgPSAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJvcnJvdyA9IDA7CiAgICAgICAgfQogICAgICAgIHJlc3VsdFtsZW4xIC0gMSAtIGldID0gZGlnaXQxIC0gZGlnaXQyIC0gYm9ycm93OwogICAgfQoKICAgIC8vINCj0LTQsNC70LXQvdC40LUg0LLQtdC00YPRidC40YUg0L3Rg9C70LXQuQogICAgKnJlc3VsdF9sZW5ndGggPSBsZW4xOwogICAgd2hpbGUgKCpyZXN1bHRfbGVuZ3RoID4gMSAmJiByZXN1bHRbbGVuMSAtICpyZXN1bHRfbGVuZ3RoXSA9PSAwKSB7CiAgICAgICAgKCpyZXN1bHRfbGVuZ3RoKS0tOwogICAgfQp9CgppbnQgY29tcGFyZShpbnQgKmJ1ZmYxLCBpbnQgbGVuMSwgaW50ICpidWZmMiwgaW50IGxlbjIpIHsKICAgIGlmIChsZW4xICE9IGxlbjIpIHsKICAgICAgICByZXR1cm4gbGVuMSAtIGxlbjI7IC8vINCh0YDQsNCy0L3QuNCy0LDQtdC8INC00LvQuNC90YsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuMTsgaSsrKSB7CiAgICAgICAgaWYgKGJ1ZmYxW2ldICE9IGJ1ZmYyW2ldKSB7CiAgICAgICAgICAgIHJldHVybiBidWZmMVtpXSAtIGJ1ZmYyW2ldOyAvLyDQodGA0LDQstC90LjQstCw0LXQvCDRjdC70LXQvNC10L3RgtGLCiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7IC8vINCn0LjRgdC70LAg0YDQsNCy0L3Riwp9