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

JavaScriptでDisarium数(デシリアム数)を判定する方法

Disarium数とは?

Disarium数(デシリアム数)とは、各桁の数字をその位置に応じた累乗で計算し、その合計が元の数値と一致するような数のことです。以下の式で表されます。

xy...z = x^1 + y^2 + ... + z^n

ここで、n はその数値の桁数を表します。

具体例

例として、175 を見てみましょう。

175 = 1^1 + 7^2 + 5^3 = 1 + 49 + 125 = 175

このように、各桁を「1乗、2乗、3乗…」と位置に応じてべき乗した結果の合計が元の数値と等しくなるため、175 は Disarium 数です。

他にも 89(8^1 + 9^2 = 8 + 81 = 89)や 518(5^1 + 1^2 + 8^3 = 5 + 1 + 512 = 518)などが Disarium 数として知られています。

Disarium数を判定するJavaScriptコード

それでは、ある数値が Disarium 数かどうかを判定する関数を JavaScript で実装してみましょう。

サンプルコード

const num = 175;
const isDisarium = num => {
   const res = String(num)
   .split("")
   .reduce((acc, val, ind) => {
      acc += Math.pow(+val, ind+1);
      return acc;
   }, 0);
   return res === num;
};
console.log(isDisarium(num));
console.log(isDisarium(32));
console.log(isDisarium(4334));

コードの解説

この関数の処理の流れは以下の通りです。

1. 数値を文字列に変換して分割: String(num).split("") により、数値を一文字ずつの配列に分解します。例えば 175 なら ['1', '7', '5'] になります。

2. reduceでべき乗の合計を計算: reduce() メソッドを使い、各桁の数字を +val で数値化し、インデックス ind に1を足した値を指数として Math.pow() でべき乗します。インデックスは0から始まるため、ind + 1 とすることで「1乗目」から正しく計算できます。

3. 元の数値と比較: 計算結果 res が元の数値 num と一致すれば true、そうでなければ false を返します。

実行結果

コンソールへの出力は以下のようになります。

true
false
false

175 は Disarium 数であるため true、32 と 4334 は条件を満たさないため false が返されます。

まとめ

JavaScript の split()reduce() を組み合わせることで、Disarium 数の判定を簡潔に実装できます。数値操作を文字列ベースで行うこの手法は、桁ごとの処理が必要なさまざまな数学的問題に応用できるので、ぜひ覚えておきましょう。

  1. JavaScriptで入力値が数字か文字かを判定する方法【isNaN()関数の使い方】

    入力された値が数字か文字(数値以外)かを判定するには、JavaScriptのisNaN()関数を使用します。この関数は、値がNaN(Not a Number:非数)である場合にtrueを返します。この特性を利用することで、ユーザーが入力した値が数値かどうかを簡単にチェックできます。 isNaN()関数とは isNaN()は「is Not a Number」の略称です。引数として渡された値が数値として解釈できない場合にtrueを、数値として解釈できる場合はfalseを返します。これにより、「入力内容が数字かどうか」をシンプルに判定できるのが特徴です。 サンプルコード 以下のコードでは、フォームの

  2. JavaScriptで数字パターンを表示する方法【初心者向けサンプルコード】

    本記事では、テキスト入力欄とボタンを備えたJavaScript・HTMLプログラムの作成方法を解説します。ユーザーが入力欄に任意の数値(例:5)を入力してボタンをクリックすると、画面に以下のような数字パターンが表示される仕組みです。(n = 5 の場合の出力例)01 01 02 01 02 03 01 02 03 04 01 02 03 04 05仕組みのポイントこのパターンは二重ループ(ネストしたforループ)を使うことで実現できます。外側のループが「行」を制御し、内側のループがその行に表示する「数字の個数」を制御します。i 行目には 1 から i までの数字が順番に出力されるため、行が進む