Skip to content

Instantly share code, notes, and snippets.

@jjant
Created March 7, 2019 16:04
Show Gist options
  • Select an option

  • Save jjant/8deada0e372dbc18c683d835e31968c1 to your computer and use it in GitHub Desktop.

Select an option

Save jjant/8deada0e372dbc18c683d835e31968c1 to your computer and use it in GitHub Desktop.
const getDigits = str => str.split("").map(digit => parseInt(digit, 10));
const stripZeros = digits =>
digits.length <= 1 ? digits : digits.replace(/^0*/, "");
const _addBignums = (num1, num2) => {
const digits1 = getDigits(num1).reverse(); // [3, 2, 2]
const digits2 = getDigits(num2).reverse(); // [4, 1]
let carry = 0; // Me dice si debo agregar un carry en esta iteración
const result = digits1.map((digit1, index) => {
const digit2 = digits2[index] || 0;
let resultDigit = digit1 + digit2 + carry;
carry = 0;
if (resultDigit >= 10) {
carry = 1;
resultDigit -= 10;
}
return resultDigit;
});
if (carry) {
result.push(1);
}
return result.reverse().join("");
};
const addBignums = (num1, num2) => {
const num1_ = stripZeros(num1);
const num2_ = stripZeros(num2);
return num1_.length >= num2_.length
? _addBignums(num1_, num2_)
: _addBignums(num2_, num1_);
};
function sumStrings(a, b) {
return addBignums(a, b);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment