【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)を間違えないことが、バグを防ぐ重要なポイントです。
-
JavaScriptで数値の各桁の数字を一つずつ分割表示する方法
はじめに この記事では、ユーザーが入力した数値を検証し、有効な数値であればその各桁の数字を画面に一つずつ表示するJavaScriptプログラムの作り方を解説します。 動作イメージ ページ上のボタンをクリックすると入力ダイアログが開き、そこに数値を入力してOKを押すと、入力された数値の各桁が一行ずつ画面に出力される仕組みです。 例えば、入力が次のような場合—— 43354 画面には次のように表示されます。 4 3 3 5 4 完成コード HTML <!DOCTYPE html> <html> <head> &n
-
JavaScriptで数値の先頭の桁を交換した後の差の絶対値を求める方法
問題の概要今回は、ちょうど2つの数値を含む配列を受け取るJavaScript関数を作成します。この関数の目的は、2つの数値の先頭の桁(最初の数字)同士を入れ替えた後、その数値の差の絶対値を返すことです。例として、配列 [105, 413] を考えてみましょう。105 の先頭の「1」と、413 の先頭の「4」を入れ替えます。すると、新しい数値はそれぞれ 405 と 113 になります。したがって、求める差は以下のようになります。|405 − 113| = 292解決のアプローチこの問題は、以下の手順で解決できます。各数値を文字列に変換する(String() を使用)。両方の文字列の先頭の1文字を