JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

【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として扱う桁の積計算を簡潔に実装できます。

  1. JavaScriptで数値の各桁の数字を一つずつ分割表示する方法

    はじめに この記事では、ユーザーが入力した数値を検証し、有効な数値であればその各桁の数字を画面に一つずつ表示するJavaScriptプログラムの作り方を解説します。 動作イメージ ページ上のボタンをクリックすると入力ダイアログが開き、そこに数値を入力してOKを押すと、入力された数値の各桁が一行ずつ画面に出力される仕組みです。 例えば、入力が次のような場合—— 43354 画面には次のように表示されます。 4 3 3 5 4 完成コード HTML <!DOCTYPE html> <html>   <head>   &n

  2. JavaScriptで単調増加する桁を持つ、指定した数以下の最大の数を求める方法

    単調増加する桁(Monotonically Increasing Digits)とは 整数が「単調増加する桁」を持つとは、隣り合う任意の2つの桁 x と y の間に、常に x <= y が成り立つことを指します。たとえば 1234 や 2299 は左から右へ向かって桁が増加(または同じ)ため条件を満たしますが、332 のように「3 → 3 → 2」と減少が含まれる数は単調増加とはみなされません。 問題 今回求められているのは、数値 num を第一引数(かつ唯一の引数)として受け取るJavaScript関数を記述することです。 この関数は、num 以下の数の中から、単調増加する桁を持つ