freeCodeCamp/curriculum/challenges/italian/10-coding-interview-prep/rosetta-code/kaprekar-numbers.md

2.4 KiB

id title challengeType forumTopicId dashedName
5a23c84252665b21eecc7eca Numeri di Kaprekar 5 302296 kaprekar-numbers

--description--

Un numero intero positivo è un [numero di Kaprekar](https://en.wikipedia.org/wiki/Kaprekar number) se:

  • È 1 o,
  • La rappresentazione decimale del suo quadrato può essere suddivisa una volta in due parti costituite da interi positivi che sommano al numero originale.

Si noti che una scissione risultante in una parte costituita esclusivamente da 0 non è valida, in quanto 0 non è considerato positivo.

Esempi di numeri di Kaprekar:

  • 2223 è un numero Kaprekar, poiché 2223 * 2223 = 4941729, 4941729 può essere suddiviso in 494 e 1729and 494 + 1729 = 2223
  • La serie di numeri Kaprekar è conosciuta come A006886 e inizia con 1, 9, 45, 55, ...

--instructions--

Scrivi una funzione che prende un numero n, una base bs, e restituisce vero se il numero è un numero di Kaprekar per la base specificata. Altrimenti, la funzione restituisce falso.

--hints--

isKaprekar dovrebbe essere una funzione.

assert(typeof isKaprekar == 'function');

isKaprekar(1, 10) dovrebbe restituire un booleano.

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

isKaprekar(1, 10) dovrebbe restituire true.

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

isKaprekar(9, 10) dovrebbe restituire true.

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

isKaprekar(2223, 10) dovrebbe restituire true.

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

isKaprekar(22823, 10) dovrebbe restituire false.

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

isKaprekar(9, 17) dovrebbe restituire false.

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

isKaprekar(225, 17) dovrebbe restituire true.

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

isKaprekar(999, 17) dovrebbe restituire 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;
}