Files
freeCodeCamp/curriculum/challenges/russian/08-coding-interview-prep/rosetta-code/harshad-or-niven-series.russian.md

2.9 KiB
Raw Blame History

title, id, challengeType, forumTopicId, localeTitle
title id challengeType forumTopicId localeTitle
Harshad or Niven series 595668ca4cfe1af2fb9818d4 5 302281 Серия Harshad или Niven

Description

Номера Harshad или Niven представляют собой целые положительные числа ≥ 1, которые делятся на сумму их цифр.

Например, 42 является числом Харшада, поскольку 42 делится на (4 + 2) без остатка.

Предположим, что ряд определяется как числа в порядке возрастания. Задача:

Реализуйте функцию для генерации последовательных членов последовательности Harshad.

Используйте его, чтобы перечислить первые двадцать членов последовательности и перечислите первое число Harshad, превышающее 1000.

Instructions

Implement a function to generate successive members of the Harshad sequence. Use it to list the first twenty members of the sequence and list the first Harshad number greater than 1000.

Tests

tests:
  - text: <code>isHarshadOrNiven</code> is a function.
    testString: assert(typeof isHarshadOrNiven === 'function');
  - text: '<code>isHarshadOrNiven()</code> should return <code>{"firstTwenty": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 18, 20, 21, 24, 27, 30, 36, 40, 42],"firstOver1000": 1002}</code>'
    testString: assert.deepEqual(isHarshadOrNiven(), res);

Challenge Seed

function isHarshadOrNiven() {
  const res = {
    firstTwenty: [],
    firstOver1000: undefined
  };
  // Change after this line

  return res;
}

After Tests

const res = {
  firstTwenty: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 18, 20, 21, 24, 27, 30, 36, 40, 42],
  firstOver1000: 1002
};

Solution

function isHarshadOrNiven() {
  const res = {
    firstTwenty: [],
    firstOver1000: undefined
  };

  function isHarshad(n) {
    let s = 0;
    const nStr = n.toString();
    for (let i = 0; i < nStr.length; ++i) {
      s += parseInt(nStr.charAt(i), 10);
    }
    return n % s === 0;
  }

  let count = 0;
  const harshads = [];

  for (let n = 1; count < 20; ++n) {
    if (isHarshad(n)) {
      count++;
      harshads.push(n);
    }
  }

  res.firstTwenty = harshads;

  let h = 1000;
  while (!isHarshad(++h));
  res.firstOver1000 = h;

  return res;
}