【JavaScript】0〜nの各数値の2乗に含まれる特定の桁の出現回数を数える方法
問題の概要
今回は、整数 n(n >= 0)と桁の数字 d(0 <= d <= 9)を引数として受け取る JavaScript 関数を作成します。
この関数は、0 から n までのすべての数値 k(0 <= k <= n)についてそれぞれ 2 乗を計算し、その結果(k**2)を書き表したときに現れる桁 d の出現回数の合計を返すものです。
たとえば n = 25、d = 1 の場合、「1, 16, 100, 121, 144, 169, 196, 361, 441」などの 2 乗値の中に含まれる「1」の個数をすべて合計することになります。
サンプルコード
以下が実際の実装コードです。
const n = 25;
const d = 1;
const countDigits = (n, d) => {
let k = 0, count = 0;
d = d.toString();
while (k <= n) {
let a = 0;
let s = (k*k).toString();
for(let i = 0; i < s.length; i++)
if(s[i] == d)
a++;
if (a > 0) {
count += a;
};
k++;
};
return count;
};
console.log(countDigits(n, d));実行結果
11
コードの解説
この関数の処理の流れは以下の通りです。
- まず、比較対象となる桁 d を
toString()メソッドで文字列に変換しておきます。 - 変数 k を 0 から n まで順に増やしながら、各数値の 2 乗(k*k)を計算して文字列化します。
- 2 乗値の文字列を先頭から 1 文字ずつ調べ、桁 d と一致する文字があればカウントします。
- 見つかった回数を累積変数 count に加算し、ループ終了後に合計値を返します。
このように、数値を一度文字列に変換して 1 文字ずつ比較するシンプルなアプローチにより、指定した桁の出現回数を効率的に数えることができます。コードは短く直感的なので、初心者の練習問題としても最適です。
-
JavaScriptで長方形内に埋め込まれた正方形の周囲長の合計を求める方法
問題 下図のように、1つの長方形の中に正方形が5つ埋め込まれている状況を考えてみましょう。 このとき、それぞれの正方形の周囲長は次のようになります。 4 + 4 + 8 + 12 + 20 = 48 単位 一見すると複雑な計算が必要そうに思えますが、よく観察すると各正方形の一辺の長さがフィボナッチ数列(1, 1, 2, 3, 5, ...)に従っていることが分かります。つまり、n個の正方形が埋め込まれている場合、周囲長の合計は「最初のn項のフィボナッチ数の総和 × 4」で求められるのです。 そこで本記事では、数値 n を引数として受け取り、n個の正方形が埋め込まれた場合の周囲長の合計を返す
-
JavaScriptで範囲内の「1に収束する素数」を数える方法
問題概要 2つの数値からなる範囲配列を受け取るJavaScript関数を作成します。この関数は、範囲内にある素数のうち、各桁の数字の2乗の和を繰り返し計算すると最終的に1に到達する数の個数を返します。 たとえば23は素数であり、次のように計算が進みます。 22 + 32 = 13 12 + 32 = 10 12 + 02 = 1 最終的に1になったため、23は条件を満たす有効な数です。なお、この性質を持つ数は一般に「ハッピー数」と呼ばれ、素数であるハッピー数は「ハッピー素数」として知られています。 コード例 以下が実際のコードです − const range = [2, 212]; Strin