-
-
Save MikePeleah/a8c7e0ebca4251a2ce2ee049037142fb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/******************************************************** | |
UniLecs 137. Multiplication of digits | |
Задача: дано натуральное число N. Необходимо найти наименьшее натуральное число, в ктр произведение его цифр было бы равно N. Если такого числа не существует, вывести -1. | |
Входные данные: N - натуральное число от 1 до 10^9. | |
Вывод: наименьшее натуральное число, произведение цифр ктр было бы равно N. -1 - если такого числа нет. | |
Пример: | |
N = 11; Answer = -1 | |
N = 12; Answer = 26 | |
N = 14; Answer = 27 | |
********************************************************/ | |
function genmultiple_v2(N){ | |
// Цифры для проверки делимости. Фишка в том, что они расположены в порядке приоритетности, так что делимость на сложные делители проверяется первой | |
var dig = [9,8,6,4,2,3,5,7] | |
// Сюда будем складывать разложение | |
var divs = [] | |
// Тут храним остаток делений | |
rest = N | |
// Бежим по всем цифрам | |
for (var i in dig){ | |
// Дадим цифре шанс! | |
divp = true | |
while (divp){ | |
// Если текущий остаток делится на цифру без остатка -- записываем цифру в разложение и даём ещё один шанс | |
if ((rest % dig[i]) == 0){ | |
divs.push(dig[i]) | |
rest = rest / dig[i] | |
} else { | |
// Иначе увы и ах! идём к следующей цифре | |
divp = false | |
} | |
} | |
} | |
// Проверяем что у нас осталось? Если 1 -- отлично, иначе либо число простое (11), либо в остатке осталось большее 9 простое или их комбинация (например 66 => 2*3*11) | |
if (rest>1) { | |
return -1 | |
} | |
// Соритируем массив, чтобы большие делители заняли низшие разряды, потом конвертируем массив в | |
divs.sort() | |
result = parseInt(divs.join("")) | |
return result; | |
} | |
console.log(genmultiple_v2(11)) | |
console.log(genmultiple_v2(12)) | |
console.log(genmultiple_v2(14)) | |
console.log(genmultiple_v2(66)) | |
console.log(genmultiple_v2(100)) | |
console.log(genmultiple_v2(1000000000)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment