【JavaScript】数値の各桁の積を再帰的に計算する方法
本記事では、与えられた数値のすべての桁を掛け合わせた結果を求めるJavaScript関数の実装方法について解説します。
問題の概要
作成するのは、数値を引数として受け取り、その各桁すべての積を返す関数です。ただし、数値の中に「0」が含まれていた場合は、0のまま計算するのではなく「1」として扱います。
具体例
例えば、入力された数値が5720だった場合を考えてみましょう。各桁は「5」「7」「2」「0」ですが、0は1として扱われるため、計算式は次のようになります。
5 × 7 × 2 × 1 = 70
したがって、この場合の出力は70となります。
再帰を使った実装コード
以下が実際のコードです。
const num = 5720;
const recursiveProduct = (num, res = 1) => {
if(num){
return recursiveProduct(Math.floor(num / 10), res * (num % 10 || 1));
}
return res;
};
console.log(recursiveProduct(num));
コードのポイント
この実装では、再帰呼び出しを使って桁を順番に処理しています。仕組みを整理すると以下の通りです。
num % 10:数値の末尾の桁(一の位)を取り出します。|| 1:取り出した桁が0の場合は1に置き換えます。これにより、0が含まれても積が0にならずに済みます。Math.floor(num / 10):末尾の桁を取り除いた残りの数値を次の再帰呼び出しに渡します。res:これまでの積が累積されていく変数で、初期値は1です。numが0(falsy)になった時点で再帰を終了し、累積された積を返します。
実行結果
コンソールには以下のように出力されます。
70
このように、シンプルな再帰処理と論理演算子の組み合わせだけで、0を1として扱う桁の積計算を簡潔に実装できます。
-
JavaScriptで数値の各桁の数字を一つずつ分割表示する方法
はじめに この記事では、ユーザーが入力した数値を検証し、有効な数値であればその各桁の数字を画面に一つずつ表示するJavaScriptプログラムの作り方を解説します。 動作イメージ ページ上のボタンをクリックすると入力ダイアログが開き、そこに数値を入力してOKを押すと、入力された数値の各桁が一行ずつ画面に出力される仕組みです。 例えば、入力が次のような場合—— 43354 画面には次のように表示されます。 4 3 3 5 4 完成コード HTML <!DOCTYPE html> <html> <head> &n
-
JavaScriptで単調増加する桁を持つ、指定した数以下の最大の数を求める方法
単調増加する桁(Monotonically Increasing Digits)とは 整数が「単調増加する桁」を持つとは、隣り合う任意の2つの桁 x と y の間に、常に x <= y が成り立つことを指します。たとえば 1234 や 2299 は左から右へ向かって桁が増加(または同じ)ため条件を満たしますが、332 のように「3 → 3 → 2」と減少が含まれる数は単調増加とはみなされません。 問題 今回求められているのは、数値 num を第一引数(かつ唯一の引数)として受け取るJavaScript関数を記述することです。 この関数は、num 以下の数の中から、単調増加する桁を持つ