Files

2.4 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
5a23c84252665b21eecc7eca Números de Kaprekar 5 302296 kaprekar-numbers

--description--

Um número inteiro positivo é um [número de Kaprekar](https://en.wikipedia.org/wiki/Kaprekar number) se:

  • É o número 1, ou
  • A representação decimal de seu quadrado puder ser dividida uma vez em duas partes, que consistem em inteiros positivos que, somados, resultam no número original.

Note que uma divisão resultando em uma parte que consiste puramente em 0s não é válida, já que 0 não é considerado um número positivo.

Exemplo de números de Kaprekar:

  • 2223 é um número de Kaprekar, pois 2223 * 2223 = 4941729, 4941729 pode ser dividido em 494 e 1729, e 494 + 1729 = 2223
  • A série de números de Kaprekar é conhecida como A006886 e começa assim: 1, 9, 45, 55, ...

--instructions--

Escreva uma função que receba um número n, uma base bs, e retorne true se o número for um número de Kaprekar para a base fornecida. Caso contrário, a função retornará false.

--hints--

isKaprekar deve ser uma função.

assert(typeof isKaprekar == 'function');

isKaprekar(1, 10) deve retornar um booleano.

assert(typeof isKaprekar(1, 10) == 'boolean');

isKaprekar(1, 10) deve retornar true.

assert.equal(isKaprekar(1, 10), true);

isKaprekar(9, 10) deve retornar true.

assert.equal(isKaprekar(9, 10), true);

isKaprekar(2223, 10) deve retornar true.

assert.equal(isKaprekar(2223, 10), true);

isKaprekar(22823, 10) deve retornar false.

assert.equal(isKaprekar(22823, 10), false);

isKaprekar(9, 17) deve retornar false.

assert.equal(isKaprekar(9, 17), false);

isKaprekar(225, 17) deve retornar true.

assert.equal(isKaprekar(225, 17), true);

isKaprekar(999, 17) deve retornar false.

assert.equal(isKaprekar(999, 17), false);

--seed--

--seed-contents--

function isKaprekar(n, bs) {

}

--solutions--

function isKaprekar(n, bs) {
  if (n < 1) return false;
  if (n == 1) return true;
  for (var a = n * n, b = 0, s = 1; a; s *= bs) {
    b += (a % bs) * s;
    a = Math.floor(a / bs);
    if (b && a + b == n) return true;
  }
  return false;
}