JSFiddle - React, Tailwind, and code Playground

by oceog

HTML

<SPAN id=body></SPAN>

JavaScript

arr1 = [2, 3, 6, 8, 9, 11, 98];
arr2 = [1, 6, 7, 9, 48, 49, 50];
Q= 4802;

var max= arr1[arr1.length-1]*arr2[arr2.length-1]+Q; // всегда больше любого произведения и Q
var result=[-max, 1]; // всегда дальше от Q чем любое из произведений
var cursor= arr2.length-1;
for (var i=0; i<arr1.length; i++) {
    while (cursor>0 && arr1[i]*arr2[cursor] > Q)
        cursor--;
    var tmp = [
        Math.abs(Q-result[0]*result[1]),
        Math.abs(Q-i*arr2[cursor]),
        Math.abs(Q-i*arr2[cursor+1])];
    if (cursor==arr2.length-1) tmp[2]=max+1;
    result= [
        result,
        [i,arr2[cursor]],
        [i,arr2[cursor+1]]
        ][tmp.indexOf(_.min(tmp))];
};
body.innerHTML=result[0]+" * "+result[1]+" = "+result[0]*result[1];