В
одной из предыдущих тем, помимо всего прочего, обсуждалась операция
, которую мне удалось использовать вместо "сишного" деления (как известно, в C деление производится с отбрасыванием дробной части).
Сегодня мне снова пришлось столкнуться с той же самой проблемой.
Вот процедура, получающая в качестве аргументов два целых числа (q и range) и вычисляющая наименьшее натуральное число в диапазоне от 1 до range, у которого произведение всех ненулевых цифр отличается от произведения всех ненулевых цифр следующего за ним числа ровно в q раз:
function fun(q, range) {
for (let i = 0; i <= range; i++) {
if((digProd(i)/digProd(i+1) | 0) == q || (digProd(i+1)/digProd(i) | 0) == q) {
return i;
}
}
return "No such number";
}
function digProd(n) {
let p = 1;
while (n > 0) {
if (n % 10 != 0) {
p *= n % 10;
n = (n / 10 | 0);
}
else {
n = (n / 10 | 0);}
}
return p;
}
console.log(fun(54, 1000));
Вопрос №0:Чем можно (и нужно!) заменить операцию
?
Вопрос №1:Какие критические замечания по поводу кода этой процедуры мне стоит принять к сведению (простым языком: сыпьте
соль критику, не жалея (ни меня, ни соли)!)?
Заранее благодарю за ответы!