@MeMoJlor

Как складывать числа, представленные в виде массивов цифр?

Допустим, есть два массива, которые нужно сложить, без преобразовании в целое число:

a = [9, 9, 9, 9];
b = [9, 9, 9];
result = [1,0,9,9,8];

Я перебираю массив с конца:

let max = Math.max(a.length - 1, b.length - 1);
for(let i = max; i >= 0; i--) {
    a[i] + b[i]
}

Но как добавить единицу, после 9+9 на следующую девятку?
  • Вопрос задан
  • 374 просмотра
Решения вопроса 1
0xD34F
@0xD34F
Массивы перебираются от конца к началу; цикл крутится до тех пор, пока какой-то из массивов не полностью обработан или имеет место быть переполнение разряда. Сумма разряда - сумма элементов массивов (если массив кончился, то 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();
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы