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

【JavaScript】数値の各桁の「和」と「積」の差を求める方法

本記事では、JavaScript を使って、ある数値の各桁の合計(和)各桁の乗算結果(積)の差を求める方法を解説します。最終的には、その差の絶対値を返す関数を作成します。

課題の内容

数値 n を引数として受け取る JavaScript の関数を作成します。この関数の役割は、次のとおりです。

  • 数値を構成するすべての桁の合計を計算する
  • 数値を構成するすべての桁のを計算する
  • 両者の差の絶対値を返す

例えば、数値が 434312 の場合、各桁の合計は「4 + 3 + 4 + 3 + 1 + 2 = 17」、各桁の積は「4 × 3 × 4 × 3 × 1 × 2 = 288」となり、差の絶対値は「288 − 17 = 271」になります。

コード例

以下が実際のコードです。

const num = 434312;

const sumProductDifference = (num = 1) => {
  // 各桁の合計を計算
  const sum = String(num)
    .split('')
    .reduce((acc, val) => acc + +val, 0);

  // 各桁の積を計算
  const product = String(num)
    .split('')
    .reduce((acc, val) => acc * +val, 1);

  // 差の絶対値を返す
  const diff = product - sum;

  return Math.abs(diff);
};

console.log(sumProductDifference(num));

実行結果

271

コードの解説

ここでは、処理の流れを順番に見ていきましょう。

1. 数値を文字列に変換して分割

String(num) で数値を文字列に変換し、split('') を使うことで、各桁を要素とする配列に分解できます。例えば 434312 なら ['4', '3', '4', '3', '1', '2'] という配列になります。

2. reduce で合計と積を算出

  • 合計:acc + +val のように単項プラス演算子(+)を使って文字列を数値に変換しながら加算します。初期値は 0 です。
  • 積:acc * +val で各桁を掛け合わせます。初期値は 1 にするのがポイントです。0 にしてしまうと、結果が必ず 0 になってしまいます。

3. Math.abs() で絶対値を取得

積から和を引いた値が負になるケースもあるため、Math.abs() を使って常に正の値(または 0)を返すようにしています。

まとめ

このように、String()split()reduce() という一連の流れを組み合わせることで、数値の各桁に対する集計処理を簡潔に記述できます。初期値の設定(合計は 0、積は 1)を間違えないことが、バグを防ぐ重要なポイントです。

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

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

  2. JavaScriptで数値の先頭の桁を交換した後の差の絶対値を求める方法

    問題の概要今回は、ちょうど2つの数値を含む配列を受け取るJavaScript関数を作成します。この関数の目的は、2つの数値の先頭の桁(最初の数字)同士を入れ替えた後、その数値の差の絶対値を返すことです。例として、配列 [105, 413] を考えてみましょう。105 の先頭の「1」と、413 の先頭の「4」を入れ替えます。すると、新しい数値はそれぞれ 405 と 113 になります。したがって、求める差は以下のようになります。|405 − 113| = 292解決のアプローチこの問題は、以下の手順で解決できます。各数値を文字列に変換する(String() を使用)。両方の文字列の先頭の1文字を