Created
March 22, 2018 18:29
-
-
Save gladilindv/30beb5a9f1a4bbf25b2a3f9ddecd6cac to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const char* sum(const char* a, const char* b) { | |
int size_a = strlen(a); | |
int size_b = strlen(b); | |
int size_max = 0, size_min = 0, temp = 0, max_k = 0, min_k = 0; | |
const char *p_max, *p_min; | |
//создаем динамический массив res и копируем в него большую строку | |
size_max = std::max(size_a, size_b); | |
size_min = std::min(size_a, size_b); | |
char *res = new char[size_max + 2]; //резервируем два символа для единицы в начале строки и для конца строки | |
memset(res, 0, (size_max + 2) * sizeof(char)); | |
if (size_a == size_max) { | |
p_max = a; | |
p_min = b; | |
} | |
else { | |
p_max = b; | |
p_min = a; | |
} | |
memcpy(res + 1, p_max, size_max); | |
//складываем числа с конца двух строк | |
for (int i = 0; i < size_max + 1; i++) { | |
max_k = a[size_max - 1 - i] - '0'; //i-ое число с конца строки a | |
min_k = b[size_min - 1 - i] - '0'; //i-ое число с конца строки b | |
//проверка на конец строк | |
if (i >= size_min && !temp) | |
break; | |
if (i >= size_min) //если закочилась меньшая строка, зануляем i-ое число с ее конца | |
min_k = 0; | |
if (i == size_max) //если закончилась большая строка, зануляем i-ое число с ее конца | |
max_k = 0; | |
//складываем данные числа, если сумма больше 9 запоминаем 1 в переменной temp, в следующей итерации прибавляем temp к очередной сумме | |
res[size_max - i] = (max_k + min_k + temp) % 10 + '0'; | |
temp = (max_k + min_k + temp) / 10; | |
} | |
res[size_max + 1] = '\0'; | |
if (res[0] != '1')//если зарезервированный байт для единицы не понадобился сдвигаем строку в начало указателя | |
memcpy(res, res + 1, size_max + 1); | |
return res; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment