JSFiddle - React, Tailwind, and code Playground

by ReinRaus

HTML

<SPAN id=body></SPAN>

JavaScript

function round(arr1, arr2, Q) {
    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-arr1[i]*arr2[cursor]),
            Math.abs(Q-arr1[i]*arr2[cursor+1])];
        if (cursor==arr2.length-1) tmp[2]=max+1;
        result= [
            result,
            [arr1[i],arr2[cursor]],
            [arr1[i],arr2[cursor+1]]
            ][tmp.indexOf(_.min(tmp))];
    }
    return result;
}

function printResult(result) {
    document.getElementById("body").innerHTML+=result[0]+" * "+result[1]+" = "+result[0]*result[1]+"<BR/>"
};
printResult( round(
    [2, 3, 6, 8, 9, 11, 98],
    [1, 6, 7, 9, 48, 49, 50],
    97) );

printResult( round(
    [2, 3, 6, 8, 9, 11, 98],
    [1, 6, 7, 9, 48, 49, 50],
    4802) );