vs_convoy
@vs_convoy

Как сложить строки как числа?

На codewars встретил такое задание:
Given the string representations of two integers, return the string representation of the sum of those integers.
Дело в том, что очень большие числа записываются в экспоненциальной форме, а нужно вывести в обычной в виде строки.
Есть популярное решение:
function sumStrings(a, b) {
  var res = '', c = 0;
  a = a.split('');
  b = b.split('');
  while (a.length || b.length || c) {
    c += ~~a.pop() + ~~b.pop();
    res = c % 10 + res;
    c = c > 9;
  }
  return res.replace(/^0+/, '');
}

Помогите понять что происходит в цикле..
  • Вопрос задан
  • 1583 просмотра
Пригласить эксперта
Ответы на вопрос 1
@fireSparrow
Если переписать на человеческий язык, то получится примерно так:

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


Отдельно стоит добавить, что если в конце итерации 'c' была 'true', то в начале следующей итерации к этому значению будет добавлена сумма двух цифр.
При сложении true интерпретируется как 1.
Соответственно, 'c' между итерациями переносит единицу в следующий по старшинству разряд и служит вместо той точки, которую мы при ручном сложении в столбик ставим в таких случаях над цифрой.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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