Long Multiplication 2
by whelkaholism
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<div id="debug"></div>
<hr/>
<div id="res"></div>
<hr/>
<div id="processDebug"></div>
JavaScript
var parts = ['u', 't', 'h', 'th', 'tth', 'hth'];
var units = function(v)
{
v = ((v || '').valueOf() + '') || '0';
return parseInt(v[v.length - 1]);
}
var tens = function(v)
{
v = ((v || '').valueOf() + '') || '0';
return parseInt(v.length >= 2 ? v[v.length - 2] : 0);
}
var n1 = 356;
var n2 = 72;
var an1 = (n1 + '').split('').reverse();
var an2 = (n2 + '').split('').reverse();
var calcs = [];
var intermediates = [];
for(var in2 = 0; in2 < an2.length; in2++)
{
intermediates[in2] = '';
for(var in1 = 0; in1 < an1.length; in1++)
{
var res = parseInt(an1[in1] * an2[in2]);
calcs.push({
in1: in1,
in2: in2,
res: res,
u: units(res),
t: tens(res),
dest: in1
});
}
}
var process =[];
for(var i = 0; i < calcs.length; i++)
{
var calc = calcs[i];
var prevcalc = (i > 0 ? calcs[i - 1] : null);
var prevcarry = (prevcalc ? parseInt(prevcalc.t) : null) || 0;
var final = parseInt(calc.res) + parseInt(prevcarry);
var colresult = i == calcs.length - 1 ? final : units(final);
if(prevcalc && (prevcalc.in2 != calc.in2))
{
process.push({
action: 'shift'
});
}
process.push({
action: 'product',
column: calc.dest + calc.in2,
product: parseInt(calc.res),
final: final,
columnResult: colresult,
prevCarry: prevcarry,
carry: parseInt(calc.t)
});
intermediates[calc.in2] = colresult + intermediates[calc.in2];
}
$('#debug').append(JSON.stringify(intermediates) + '<br/>');
for(var i = 0; i < process.length; i++)
{
var o = process[i];
$('#res').append(
o.action + ' ' + o.product +
(o.prevCarry ? ' + ' + o.prevCarry + ' carried over from previous = ' + o.final : '') +
' = <b>' + o.columnResult + ' => ' + parts[o.column] + '</b>' + (o.carry ? ' carry ' + o.carry : '') + '<br/>'
);
}
$('#res').append('<br/>');
for(var in2 = 0; in2 < an2.length; in2++)
$('#res').append((intermediates[in2] * Math.pow(10, in2)) + '<br/>');