Skip to content

Instantly share code, notes, and snippets.

@danbrianwhite
Last active December 6, 2018 09:33
Show Gist options
  • Save danbrianwhite/be7709cc5e1ba23d7c69 to your computer and use it in GitHub Desktop.
Save danbrianwhite/be7709cc5e1ba23d7c69 to your computer and use it in GitHub Desktop.
JavaScript Factorial using strings for larger calculations. (Can get quite slow)
var add = function(strNumOne, strNumTwo)
{
var first;
var second;
var tempNumber = new Array();
if(strNumOne.length >= strNumTwo.length)
{
first = strNumOne;
second = strNumTwo;
}
else
{
first = strNumTwo;
second = strNumOne;
}
var count = 0;
var difference = first.length - second.length;
var carryOver = 0;
for (var i = second.length - 1; i >= 0; i--)
{
var temp = parseInt(second[i]) + parseInt(first[i+difference]) + carryOver;
if (temp >= 10)
{
temp = temp - 10;
carryOver = 1;
}
else
{
carryOver = 0;
}
tempNumber[count] = temp;
count++;
};
for (var i = difference; i > 0; i--)
{
var temp = parseInt(first[i-1]) + carryOver;
if (temp >= 10)
{
temp = temp - 10;
carryOver = 1;
}
else
{
carryOver = 0;
}
tempNumber[count] = temp;
count++;
};
if (difference === 0 && carryOver != 0)
{
tempNumber[count] = carryOver;
}
var finalNumber = new Array();
for (var i = tempNumber.length - 1; i >= 0; i--)
{
finalNumber += String(tempNumber[i]);
};
return finalNumber;
}
var multiply = function(strNumOne, strNumTwo)
{
var first;
var second;
var tempNumber = new Array();
if(strNumOne.length >= strNumTwo.length)
{
first = strNumOne;
second = strNumTwo;
}
else
{
first = strNumTwo;
second = strNumOne;
}
var difference = first.length - second.length;
var tempNumberArray = ['0'];
var countZeros = 0;
for (var i = second.length - 1; i >= 0; i--)
{
var count = countZeros;
for (var j = first.length - 1; j >= 0; j--)
{
var temp = parseInt(second[i]) * parseInt(first[j]);
for (var k = 0; k < count; k++)
{
temp += '0';
};
tempNumberArray.push(temp);
count++;
};
countZeros++;
};
var finalNumber = "0";
for (var i = tempNumberArray.length - 1; i >= 0; i--) {
finalNumber = (add)(String(finalNumber), String(tempNumberArray[i]));
};
return finalNumber;
}
var factorial = function(number)
{
var factorialNumber = 1;
function factorialMultiply(currentMultiply, currentNumber)
{
if(currentMultiply === '0')
{
currentMultiply = 1;
}
return (multiply)(String(currentMultiply), String(currentNumber))
}
for (var i = number; i >= 0; i--) {
factorialNumber = (factorialMultiply)(String(i), String(factorialNumber));
}
return factorialNumber;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment