--- id: 5a23c84252665b21eecc7eca title: カプレカ数 challengeType: 5 forumTopicId: 302296 dashedName: kaprekar-numbers --- # --description-- 正の整数は以下の場合、[カプレカ数](https://en.wikipedia.org/wiki/Kaprekar number) となります。 ただし、分割された部分が 0 のみであった場合は、0 は正とはみなされないため、無効となることに注意してください。 カプレカ数の例: # --instructions-- 数値 $n$、底 $bs$ を取り、数値が与えられた底に対するカプレカ数の場合は true を返す関数を記述してください。 それ以外の場合、関数は false を返します。 # --hints-- `isKaprekar` は関数とします。 ```js assert(typeof isKaprekar == 'function'); ``` `isKaprekar(1, 10)` はブール値を返す必要があります。 ```js assert(typeof isKaprekar(1, 10) == 'boolean'); ``` `isKaprekar(1, 10)` は `true` を返す必要があります。 ```js assert.equal(isKaprekar(1, 10), true); ``` `isKaprekar(9, 10)` は `true` を返す必要があります。 ```js assert.equal(isKaprekar(9, 10), true); ``` `isKaprekar(2223, 10)` は `true` を返す必要があります。 ```js assert.equal(isKaprekar(2223, 10), true); ``` `isKaprekar(22823, 10)` は `false` を返す必要があります。 ```js assert.equal(isKaprekar(22823, 10), false); ``` `isKaprekar(9, 17)` は `false` を返す必要があります。 ```js assert.equal(isKaprekar(9, 17), false); ``` `isKaprekar(225, 17)` は `true` を返す必要があります。 ```js assert.equal(isKaprekar(225, 17), true); ``` `isKaprekar(999, 17)` は `false` を返す必要があります。 ```js assert.equal(isKaprekar(999, 17), false); ``` # --seed-- ## --seed-contents-- ```js function isKaprekar(n, bs) { } ``` # --solutions-- ```js 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; } ```