Я написал краткое и элегантное рекурсивное решение этой проблемы.
Сначала у нас есть функция, которая добавляет 5 в позицию числа:
function insert5(value, power){
let five = 5 * Math.pow(10, power);
if(value < 0) five *= -1;
let right = value % Math.pow(10, power);
let left = (value - right) * 10;
return (left + five + right);
}
Затем у нас есть функция, которая решает, какая из возможностей является лучшей.
function highestValue(value, power){
var lastPower = Math.floor(Math.log10(Math.abs(value)) + 1);
if(power > lastPower) return Number.NEGATIVE_INFINITY;
return Math.max(insert5(value, power), highestValue(value, power + 1));
}
Вам просто нужно позвонить highestValue(your_number, 0)
.