Если переписать на человеческий язык, то получится примерно так:
Выполнять, пока в 'a' или 'b' ещё остались символы, или пока число 'c' не нулевое {
Взять по одной цифре с конца из 'a' и 'b', сложить как числа и прибавить к 'c'
Дописать к 'res' цифру, которая является остатком от деления 'c' на 10
// То есть это попросту цифра, на которую заканчивается число 'c'
Записать в 'c' boolean - было ли оно на этом шаге больше 9
// Если было, то осталась необработанная цифра и нужно делать ещё итерацию
}
Отдельно стоит добавить, что если в конце итерации 'c' была 'true', то в начале следующей итерации к этому значению будет добавлена сумма двух цифр.
При сложении true интерпретируется как 1.
Соответственно, 'c' между итерациями переносит единицу в следующий по старшинству разряд и служит вместо той точки, которую мы при ручном сложении в столбик ставим в таких случаях над цифрой.