JavaScriptで自然数列のn番目の桁を求める方法
自然数列とは
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12…
このように無限に続く数の並びを「自然数列」と呼びます。カンマや空白を取り除いて連結すると、「123456789101112…」という一続きの桁の並びになります。
問題の概要
数値 num を唯一の引数として受け取るJavaScript関数を作成します。この関数は、自然数列をカンマや空白なしで連結したときに現れる num 番目の桁の数字を求め、その値を返す必要があります。
例
入力が次の場合:
const num = 13;
出力は次のようになります:
const output = 1;
これは、連結された文字列「1234567891011」の13番目の桁が「1」であるためです。
実装コード
const num = 13;
const findDigit = (num = 1) => {
let str = '';
let i = 1;
while(str.length < num){
str += i;
i++;
};
const required = str[num - 1];
return required;
};
console.log(findDigit(num));
コードの解説
- まず、結果を格納する空の文字列 str と、現在処理中の自然数を表すカウンタ変数 i(初期値は1)を用意します。
- whileループにより、str の長さが num 以上になるまで、i を文字列に連結し続けながら i を1ずつ増やしていきます。
- 条件を満たした時点で、str の num 番目の文字(インデックスは num - 1)が求める桁になるため、それを返します。
実行結果
コンソールには次のように出力されます:
1
このアプローチは直感的で理解しやすいのが特徴ですが、num が非常に大きい場合(数百万桁以上など)には文字列の連結に時間とメモリを多く消費する点に注意が必要です。そのようなケースでは、桁数ごとの数字の出現個数をもとに数学的に直接計算する方法の方が効率的です。
-
JavaScriptでパスカルの三角形のn行目の要素を求める方法
パスカルの三角形とは パスカルの三角形は、前の行の隣接する要素同士を足し合わせていくことで構成される、三角形状の数列配置です。各行の両端は必ず1となり、内側の各要素はそのすぐ上にある2つの要素の和になります。 パスカルの三角形の最初のいくつかの要素は以下の通りです。 求めるもの 今回は、正の整数 num を唯一の引数として受け取り、パスカルの三角形の num 行目に存在するすべての要素を配列として返すJavaScript関数を作成します。 たとえば、入力が次の場合: const num = 9; 期待される出力は以下のようになります。 const output = [1, 9, 36, 8
-
JavaScriptで数列の和を計算する方法
問題次のような級数の和を考えてみましょう。$$seq(n,\:p)=\displaystyle\sum\limits_{k=0}^{n}(-1)^{k}\times\:p\:\times 4^{n-k}\:\times\frac{2n-k}{k}$$この問題では、数値 n と p を引数として受け取り、seq(n, p) の計算結果を返すJavaScript関数を作成することが求められます。この級数は以下の要素で構成されています。(-1)k: kが偶数なら正、奇数なら負となる交互符号p: 固定の係数4n-k: 4の冪乗(2n-k)/k: kに応じて変化する倍率解決策forループを使って k =