JavaScriptで桁の和が回文数かどうかを判定する関数を作る方法
問題概要
今回は、数値 num を第1引数(唯一の引数)として受け取る JavaScript 関数を作成します。
この関数は、num の各桁の数字を合計した値が回文数(palindrome number)である場合に true を返し、そうでない場合は false を返す必要があります。
例えば、関数への入力が次のようだったとします。
const num = 781296;
このとき、期待される出力は以下の通りです。
const output = true;
出力の解説
781296 の各桁の和を計算すると、7 + 8 + 1 + 2 + 9 + 6 = 33 となります。
33 は左右から読んでも同じ値になる回文数であるため、結果は true になります。
コード例
以下が実際のコードです。
const num = 781296;
// 各桁の数字を再帰的に足し合わせて合計を求める関数
const findSum = (num, sum = 0) => {
if (num) {
return findSum(Math.floor(num / 10), sum + (num % 10));
}
return sum;
};
// 桁の和が回文数かどうかを判定する関数
const palindromeDigitSum = (num = 1) => {
const sum = findSum(num);
const str = String(sum);
const arr = str.split('');
const reversed = arr.reverse();
const revNum = +arr.join('');
return revNum === sum;
};
console.log(palindromeDigitSum(num));コードのポイント
- findSum 関数:再帰呼び出しを使い、「10 で割った余り」で一の位を取り出しながら合計を積み上げます。num が 0 になった時点で合計値を返します。
- palindromeDigitSum 関数:桁の和を文字列に変換し、
split('')で配列化したうえでreverse()とjoin('')を使って逆順の数値を生成します。 - 元の合計値と逆順の数値が一致すれば、それは回文数であると判断できます。
実行結果
コンソールには以下が出力されます。
true
781296 の桁の和である 33 が回文数のため、正しく true が返されていることが確認できます。この手法は、任意の整数に対して汎用的に使えるシンプルな実装です。
-
JavaScriptで数値配列内の母音(ASCIIコード)を判定して置換する方法
問題 ここで求められているのは、数値の配列を受け取るJavaScript関数を作成することです。配列の中に、ASCIIコードとして母音(a・e・i・o・u)に該当する数値が存在する場合、その数値を対応する母音の文字に置き換え、変換後の新しい配列を返す必要があります。 考え方 ASCIIコードでは、小文字の母音はそれぞれ「a」= 97、「e」= 101、「i」= 105、「o」= 111、「u」= 117 に対応しています。そこで、String.fromCharCode() を使って各数値を文字に変換し、その文字が母音かどうかを判定すればよいわけです。母音に一致した要素だけを文字へ置き換えます
-
JavaScriptで数値に序数接尾辞(st・nd・rd・th)を追加する方法
問題JavaScriptで関数を作成する必要があります。この関数は、数値 num を最初の(唯一の)引数として受け取ります。関数の役割は、英語の序数表記のルールに従って、数値に「st」「nd」「rd」「th」という接尾辞を追加することです。具体的なルールは以下の通りです。一の位が1で終わる数値には「st」を使用します(例:1st、発音はfirst)一の位が2で終わる数値には「nd」を使用します(例:92nd、発音はninety-second)一の位が3で終わる数値には「rd」を使用します(例:33rd、発音はthirty-third)上記ルールの例外として、下二桁が11・12・13となる数値に