Массивы перебираются от конца к началу; цикл крутится до тех пор, пока какой-то из массивов не полностью обработан или имеет место быть переполнение разряда. Сумма разряда - сумма элементов массивов (если массив кончился, то
0
) и переполнения предыдущего разряда. Цифра разряда нового числа - младший разряд суммы (т.е., остаток от деления на
10
).
function sum(a, b) {
const result = [];
for (
let i = ~-a.length, j = ~-b.length, overflow = 0;
i >= 0 || j >= 0 || overflow;
i--, j--
) {
const digit = (a[i] | 0) + (b[j] | 0) + overflow;
overflow = +(digit > 9);
result.push(digit % 10);
}
return result.reverse();
}