Как исправить найденный HCF только если числа равны - PullRequest
0 голосов
/ 29 июня 2019

Я создаю код для нахождения наивысшего общего множителя из двух чисел, однако код всегда будет возвращать «неопределенное», если только два числа, указанные в качестве параметров функции, не равны.

У меня естьпробовал несколько числовых входных данных, таких как (3,6), (6,12), (7,11) и другие аналогичные, все из которых возвращали «неопределенное».

function HCF_Finder (num1, num2) {
  var i = 1;
  let factors1 = [];
  let factors2 = []
  while (i <= Math.ceil(num1 / 2)) {
    if (num1 % i == 0) {
      factors1.push(i);
    }
    i ++
  }
  i = 1;
  while (i <= Math.ceil(num2 / 2)) {
    if (num2 % i == 0) {
      factors2.push(i);
    }
    i ++;
  }
  factors1.push(num1);
  factors2.push(num2);
  if (num1 == num2) {
    return (num1);
  } else if (num1 < num2) {
    for (x = 1; x < factors1.length + 1; x ++) {
      if (factors2.includes(factors1[-1 * x])) {
        return (factors1[-1 * x]);
      }
    }
  } else {
    for (x = 1; x < factors2.length + 1; x ++) {
      if (factors1.includes(factors2[-1 * x])) {
        return (factors2[-1 * x]);
      }
    }
  }
}

Ожидаемый результат(3,5) должно быть 1, но не определено.Ожидаемое значение (6,12) должно быть 6, но не определено.

1 Ответ

0 голосов
/ 29 июня 2019

Что с использованием отрицательного индекса внутри массива. Небольшое изменение в вашем коде должно исправить это. Причина неопределенности в том, что вы используете отрицательное значение индекса внутри массива. Измените ваш блок elseIf на что-то ниже

let length = factors1.length;
    for (x = 1; x < length + 1; x ++) {
      if (factors2.includes(factors1[length-x])) {
        return (factors1[length-x]);
      }
    }

То же самое относится и к блоку else. Также я бы предложил попробовать алгоритм Евклида, чтобы найти HCF. Это намного элегантнее и меньше, чем код, который вы уже написали

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...