Skip to content

Instantly share code, notes, and snippets.

@tuanlc
Created August 3, 2022 02:59
Show Gist options
  • Select an option

  • Save tuanlc/45f4463a23e0dce958ee15dc3a9bb0d4 to your computer and use it in GitHub Desktop.

Select an option

Save tuanlc/45f4463a23e0dce958ee15dc3a9bb0d4 to your computer and use it in GitHub Desktop.
Solution for number of carries when sum 2 numbers in Javascript
numberOfCarryOperations(1234, 5678); //2
numberOfCarryOperations(5555, 5555); //4
numberOfCarryOperations(123, 456); //0
function numberOfCarryOperations(a, b) {
const revertedArrayOfDigitOfA = pushNumberToStack(a).reverse();
const revertedArrayOfDigitOfB = pushNumberToStack(b).reverse();
const numberOfCaries = calculateNumberOfCarryOperations({
arrayOfDigitA: revertedArrayOfDigitOfA,
arrayOfDigitB: revertedArrayOfDigitOfB,
carryNumber: 0,
index: 0,
maxLength: Math.max(revertedArrayOfDigitOfA.length, revertedArrayOfDigitOfB.length),
numberOfCarries: 0,
});
console.log('numberOfCaries', numberOfCaries);
}
function calculateNumberOfCarryOperations(options) {
const { arrayOfDigitA, arrayOfDigitB, carryNumber, index, maxLength, numberOfCarries } = options;
if (index === maxLength) return numberOfCarries;
const aDigit = arrayOfDigitA[index] || 0;
const bDigit = arrayOfDigitB[index] || 0;
let nextCarryNumber = 0;
let nextNumberOfCarries = numberOfCarries;
if ((aDigit + bDigit + carryNumber) >= 10) {
nextCarryNumber = Math.floor((aDigit + bDigit + carryNumber) / 10);
nextNumberOfCarries ++;
}
return calculateNumberOfCarryOperations({
arrayOfDigitA,
arrayOfDigitB,
carryNumber: nextCarryNumber,
index: index + 1,
maxLength,
numberOfCarries: nextNumberOfCarries
});
}
function pushNumberToStack(number) {
const numberInString = `${number}`;
const arrayOfDigit = numberInString.split('').map(char => +char);
return arrayOfDigit;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment